JAAS之快速开发JBOSS自定义认证

简介:

      在企业应用中,认证是一个很常见的需求,而在J2EE项目中,认证登录大致有两种方式来实现:

      一种是通过过滤器来拦截请求控制登录与权限,另外一种方式就是适用JAAS, 今天就简单介绍下使用JAAS快速开发一个JBOSS的自定义认证。

一、环境准备工作:

1.1 一个部署的war包,包内应当配置资源保护,和启用JAAS验证。

  WEB-INF中web.xml 中配置资源保护 示例:        

  <security-constraint>
  <web-resource-collection>
   <web-resource-name>war_all_pages</web-resource-name>
   <url-pattern>*.do</url-pattern>
   <url-pattern>*.jsp</url-pattern>
   <url-pattern>*.htm</url-pattern>
   <http-method>GET</http-method>
   <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
   <role-name>users</role-name>
  </auth-constraint>
 </security-constraint>

 

 <login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
   <form-login-page>/login.jsp</form-login-page>
   <form-error-page>/error.jsp</form-error-page>
  </form-login-config>
 </login-config>
 <security-role>
  <role-name>users</role-name>
 </security-role>

 

  WEB-INF 中 jboss-web.xml配置  示例:

<jboss-web>

<!-- 下面的test就是在login-config.xml配置的application-policy的名称 -->

       <security-domain>java:/jaas/ test</security-domain>

        </jboss-web>

 

登陆页面 示例:

根目录下添加login.jsp ,提交至j_security_check 且提交帐号密码为j_username 、j_password

      

<form name="form" method="POST" action="j_security_check">

<table >

 <tr><td>

<input type="text" name="j_username" >

 </td> </tr>

 <tr><td>

<input type="password" name="j_password" >

     </td>

   </tr>

<tr><td></td><td><input type="submit" value="登录"></td></tr>

 </table>

</form> 

 

 

 

二、开发一个简单自定义认证模块

 

       在众多Loginmodule中,UsernamePasswordLoginModule是一个可以快速扩展的类,它已经处理了提交进来的参数,我们只需简单扩展就可以使用,代码参考:

 

Java代码   收藏代码
  1. <span>public class TestLoginModule extends UsernamePasswordLoginModule  
  2. {  
  3.     private SimplePrincipal user;  
  4.     private boolean guestOnly;  
  5.     protected static Logger log = Logger.getLogger(TestLoginModule .class);  
  6.   
  7.     protected Principal getIdentity()  
  8.     {  
  9.         Principal principal = this.user;  
  10.         if (principal == null)  
  11.             principal = super.getIdentity();  
  12.         return principal;  
  13.     }  
  14.   
  15.     protected boolean validatePassword(String inputPassword, String expectedPassword)  
  16.     {  
  17.   
  18.         boolean isValid = false;  
  19.         if (inputPassword == null)  
  20.         {  
  21.             this.guestOnly = true;  
  22.             isValid = true;  
  23.             this.user = new SimplePrincipal("guest");  
  24.         }  
  25.         else  
  26.         {  
  27.             log.debug("inputPassword" + inputPassword);  
  28.              //这里实现了对用户密码的验证,可以自定义验证方式。  
  29.             isValid = inputPassword.equals("aaaaa888");  
  30.         }  
  31.         return isValid;  
  32.     }  
  33.   
  34.     protected Group[] getRoleSets() throws LoginException  
  35.     {  
  36.         Group[] roleSets = { new SimpleGroup("Roles") };  
  37.         if (!this.guestOnly)  
  38.          //这里加入了需要的角色。  
  39.             roleSets[0].addMember(new SimplePrincipal("users"));  
  40.         roleSets[0].addMember(new SimplePrincipal("guest"));  
  41.         return roleSets;  
  42.     }  
  43.   
  44.       
  45.     @Override  
  46.     public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)  
  47.     {  
  48.         super.initialize(subject, callbackHandler, sharedState, options);  
  49.     }  
  50.   
  51.     @Override  
  52.     protected String getUsersPassword() throws LoginException  
  53.     {  
  54.         return getUsername();  
  55.     }  
  56.   
  57. }</span>  

 

 

 

 

三、在JBOSS中配置自定义认证模块:

 

         现在需要配置我们开发的认证模块了,在{jboss_server}\default\conf 下修改login-config.xml

 

         在    <application-policy name = "other">节点下加入:

 

          <authentication>
             <login-module code = "org.jboss.security.auth.spi.TestLoginModule" flag = "required"></login-module>
           </authentication>

 

四、测试。

 

         现在把第一步准备的war包放入部署目录,把第二步开发的模块编译的jar包放入{jboss_server}\default\lib下,重启服务器,

 

 访问http://xxxx:端口/test  ,输入账号密码,ok,你的jboss自定义认证模块可以使用了。  

 


目录
相关文章
|
29天前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理(单点登录)
springboot实现用户统一认证、管理(单点登录)
40 0
|
29天前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理-前端实现
springboot实现用户统一认证、管理-前端实现
12 0
|
29天前
|
前端开发 JavaScript Java
springboot实现用户统一认证、管理
springboot实现用户统一认证、管理
16 0
|
2月前
|
安全 Java 数据库
后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)
后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)
|
3月前
|
存储 缓存 数据库
Shiro【核心功能、核心组件、项目搭建 、配置文件认证、数据库认证 】(一)-全面详解(学习总结---从入门到深化)
Shiro【核心功能、核心组件、项目搭建 、配置文件认证、数据库认证 】(一)-全面详解(学习总结---从入门到深化)
40 1
|
4月前
|
安全 Java API
盘点认证框架 : SpringSecurity 基础篇
SpringSecurity 应该是最常见的认证框架了 , 处于Spring体系中使他能快速地上手 , 这一篇开始作为入门级开篇作 , 来浅浅地讲一下SpringSecurity 的整体结构.
|
5月前
|
存储 安全 Java
介绍Spring Security框架,以及如何使用它实现应用程序的安全性
Spring Security 是一个功能强大且灵活的框架,用于实现应用程序的安全性。它提供了身份验证、授权、会话管理、密码存储和攻击防护等核心功能,同时支持单点登录和与第三方身份提供者的集成。通过简单的配置和定制,您可以轻松地为您的应用程序添加多层安全性。
|
8月前
|
JSON 缓存 监控
我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.7.0更新
什么是 rest-api-spring-boot-starter rest-api-spring-boot-starter 适用于SpringBoot Web API 快速构建让开发人员快速构建统一规范的业务RestFull API 不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。
|
8月前
|
缓存 监控 安全
我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.6.0更新
什么是 rest-api-spring-boot-starter rest-api-spring-boot-starter 适用于SpringBoot Web API 快速构建让开发人员快速构建统一规范的业务RestFull API 不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。
|
9月前
|
Java
Java SpringBoot集成WebSocket根据登陆权限认证
Java SpringBoot集成WebSocket根据登陆权限认证