`

REST安全实践·4.JAASRealm+FORM认证

阅读更多
 

4. JAASRealm + FORM认证

  • Accesses authentication information through the Java Authentication & Authorization Service (JAAS) framework.
  • 通过实现JAAS(JSR196标准)的服务,获取认证信息

4.1 创建Realm所需的数据表

mysql -uroot -p < security.sql

4.2 配置JAASRealm

$CATALINA_BASE/conf/server.xml

<Context docBase="security-rest" ……>
    <Realm className="org.apache.catalina.realm.JAASRealm"
    appName="RestJaasRealm"          
    roleClassNames="com.example.jaas.RestRolePrincipal" 
    userClassNames="com.example.jaas.RestUserPrincipal"/>
</Context>

Realm定义在context中,否则会导致roleClassNames和userClassNames中定义的类找不到。appName定义的名字和restJaas.conf中定义的须一致。

Eclipse内置Tomcat配置 eclipse.server.xml

4.3 JAAS配置文件

/security-rest/src/main/resources/restJaas.conf

RestJaasRealm{
    com.example.jaas.RestLoginModule required;
};

第二参数取值和含义

  • Required 该模块必须认证用户,如果认证失败,使用其它登录模块认证
  • Requisite 如果认证失败,将终止认证
  • Sufficient 如果认证成功,即获得登录认证;如果认证失败,使用其它登录模块认证
  • Optional 认证将继续下去,即使该模块认证成功

4.4 JAAS实现类

jax-rs2-guide\sample\6\security-rest\src\main\java\com\example\jaas>ls -l

  • LoginModule实现类:RestLoginModule.java
  • LoginModule实现类的数据库操作类:RestLoginDao.java
  • Role接口POJO类:RestRolePrincipal.java
  • User接口POJO类:RestUserPrincipal.java

4.5 配置JVM启动参数

-Djava.security.auth.login.config="D:\+aries\github\jax-rs2-guide\sample\6\security-rest\src\main\resources\restJaas.conf"

Eclipse内置Tomcat 虚拟机参数设置 eclipse.server.launch.xml

4.6 数据库驱动

$CATALINA_HOME/lib

M2_REPO/mysql/mysql-connector-java/5.1.25/mysql-connector-java-5.1.25.jar

4.7 配置应用的web.xml

/security-rest/src/main/webapp/WEB-INF/web.xml

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>UPDATE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>UPDATE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
    </form-login-config>
</login-config>

<welcome-file-list>
    <welcome-file>/index.html</welcome-file>
</welcome-file-list>

4.8 登录页面

<form action="j_security_check">
    <div>
        <span>User Name</span>
        <input id="j_username" name="j_username" type="text" />
    </div>
    <div style="margin-top:10px;margin-bottom:10px;">
        <span>Pass Word</span>
        <input id="j_password" name="j_password" type="password" />
    </div>
    <input type="submit" value="Sign In" />
</form>

4.9 JAAS流程

在JAASRealm.authenticate认证方法中,有两个主要对象:

  • CallbackHandler 持有登录信息的回调
  • LoginContext 通过配置文件感知LoginModule实现类的上下文

认证分为两个步骤:

  • 验证登录信息合法性 对应login方法 eclipse.server.launch.xml

  • 获取登录身份信息 对应commit方法 eclipse.server.launch.xml

1
2
分享到:
评论

相关推荐

    SpringBoot+Mybatis在线问卷系统.zip

    这是个前后端分离的、支持跨域访问的REST风格的Vue.js+Spring Boot项目,开发工具为IDEA,数据库为MySQL。 这是个前后端分离的、支持跨域访问的REST风格的Vue.js+Spring Boot项目,开发工具为IDEA,数据库为MySQL。...

    一个完整的博客系统,基于REST架构,使用Node.js +

    综合上述信息,这个基于REST架构的Node.js博客系统展示了现代Web开发的一些关键技术和实践,包括: 1. **前后端分离**:通过REST API,前端和后端可以独立开发和部署,提高开发效率。 2. **实时性**:Node.js的事件...

    Python库 | plone.restapi-7.5.0.tar.gz

    3. 认证和授权:plone.restapi通常会集成Plone的安全模型,允许对资源进行细粒度的访问控制,确保只有经过身份验证和授权的用户才能执行特定操作。 4. 资源表示:库可能包含对Plone对象的序列化和反序列化逻辑,以...

    definitions.json + advanced-rest-client

    用户可以设置请求头、查询参数、请求体和认证信息。它还提供了JSON格式化和验证功能,方便开发者处理JSON数据。此外,ARC还能保存请求历史,方便日后复用或回顾。 "definitions.json"文件是ARC中的一个重要组成部分...

    Yelp-NodeJS-EJS-REST:Yelp原型.NodeJS+EJS+REST.Academic项目开发

    标题中的“Yelp-NodeJS-EJS-REST”是一个学术项目,它利用了Node.js、EJS模板引擎和RESTful API设计原则来构建一个类似Yelp的平台。这个项目是为学习者提供实践Web开发技能的机会,特别是对于使用JavaScript进行后端...

    Django-Vue-Extend:基于 django2.x + vue2.x 的集成项目

    django-vue-extend基于 django 2.x + vue2.x 的 集成项目技术栈后端框架:基于 Django 2.X + django-rest-framework前端框架:基于 Vue 2.X + Element UI数据模型:基于 PyMySQL 存储授权验证:基于 JWT内置功能:...

    flowable(ui+rest)-6.7.0.zip

    Flowable UI app; ... (login/password: admin/test) The API documentation will be available on http://localhost:8080/flowable-rest/docs/ . (login/password: rest-admin/test)

    REST-API:node + vue.js + bootstrap

    REST-API:node + vue.js + bootstrap

    REST JSON框架Rest.li.zip

    Rest.li 是来自 Linkedin 的一款REST JSON框架,使用动态发现和简单的异步API即可构建健壮可伸缩的服务架构体系。该框架已在LinkedIn得到运用与发展,日趋成熟,满足自身不断发展的需求。 服务端示例:@...

    rest风格+jdbctemplate的CRUD操作.rar

    使用SpringMVC+jdbctemplate实现REST风格的CRUD功能 完成功能:能够对用户进行CRUD操作,界面粗糙,只做演示 运行环境:eclipse2019.03+JDK8+Tomcat9.0.41+MySQL5.5 运用到的技术:spring+springMVC+jdbctemplate+...

    Advanced-REST-client_v3.1.9+definitions.json

    《Advanced-REST-client_v3.1.9与definitions.json:深入理解REST API调试工具与定义文件》 在当今的Web开发领域,RESTful API已经成为构建分布式系统和微服务架构的标准接口设计模式。为了方便开发者测试和调试...

    sails-rest, 在 Sails.js 中,使用rest式API作为ORM适配器.zip

    sails-rest, 在 Sails.js 中,使用rest式API作为ORM适配器 rest 提供从 Sails.js &水线轻松访问 RESTful api的。MODULE 是一个水线/帆适配器,一个快速开发的工具,工具不可知的数据标准。 它的目标是提供一组声明性...

    autenticacao-ayty-pbprev:使用Bootstrap + Angular.js + Rest + Hibernate进行用户身份验证

    ayty-pbprev身份验证 使用Bootstrap + Angular.js + Rest + Hibernate进行用户身份验证。

    PyPI 官网下载 | flask_rest4-0.1.8.tar.gz

    5. **认证与授权**:Flask-REST4支持基本的认证机制,如API密钥,以及更高级的身份验证策略,如OAuth2。 6. **Swagger文档支持**:通过集成Swagger UI,开发者可以生成交互式的API文档,方便测试和调试。 7. **...

    大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统

    大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统,baidu链接,谢谢

    pelican-socialnetwork-v1:Vue.js + Node.js + Express + Sequelize + MySQL

    根据法规创建和实施逻辑数据模型(REST API) 安全地实施CRUD操作 将数据存储在SQL数据库中 数据安全性(OWASP / RGPD) 验证用户身份并维护其会话 自定义发送到Web客户端的内容 技术能力 Html CSS / SCSS Java...

    基于Django+Django -Rest-Framework+Python的在线考试系统后端(源码).zip

    4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Django+Django -Rest-Framework+Python的在线考试系统后端(源码).zip 基于Django+Django -Rest-Framework+Python...

    Pomodoro-REST-API:用于番茄钟项目的 Node.JS + MongoDB (NoSQL) 中的 REST API

    Node.JS + Express Server REST API 平台的存储库。 代码未维护,因为 Pomodoro 不再使用此 REST API(切换到 Parse) 文档 内容类型: application/json 。 授权:私有端点的承载 SESSION_ID 获取/api/产品 ...

    devcamper_rest_api:使用Node.js + Express + MongoDB创建Devcamper REST API

    《使用Node.js + Express + MongoDB构建Devcamper REST API》 在当今的Web开发领域,API(应用程序接口)已经成为连接不同系统和服务的...在实际开发中,还需要考虑安全性、认证授权等问题,以确保API的安全稳定运行。

    rest开发包

    4. **统一接口(Uniform Interface)**:REST的一个关键原则是提供统一的接口,使得客户端无需关心服务端的具体实现。这包括使用标准HTTP方法、URI和媒体类型。 5. **无状态(Statelessness)**:每次请求都包含...

Global site tag (gtag.js) - Google Analytics