当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

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

发表于: 2014-04-24   作者:小码哥BASE64   来源:转载   浏览次数:
摘要:       在企业应用中,认证是一个很常见的需求,而在J2EE项目中,认证登录大致有两种方式来实现:       一种是通过过滤器来拦截请求控制登录与权限,另外一种方式就是适用JAAS, 今天就简单介绍下使用JAAS快速开发一个JBOSS的自定义认证。 一、环境准备工作: 1.1 一个部署的w

      在企业应用中,认证是一个很常见的需求,而在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是一个可以快速扩展的类,它已经处理了提交进来的参数,我们只需简单扩展就可以使用,代码参考:

 

public class TestLoginModule extends UsernamePasswordLoginModule
{
    private SimplePrincipal user;
    private boolean guestOnly;
    protected static Logger log = Logger.getLogger(TestLoginModule .class);

    protected Principal getIdentity()
    {
        Principal principal = this.user;
        if (principal == null)
            principal = super.getIdentity();
        return principal;
    }

    protected boolean validatePassword(String inputPassword, String expectedPassword)
    {

        boolean isValid = false;
        if (inputPassword == null)
        {
            this.guestOnly = true;
            isValid = true;
            this.user = new SimplePrincipal("guest");
        }
        else
        {
            log.debug("inputPassword" + inputPassword);
             //这里实现了对用户密码的验证,可以自定义验证方式。
            isValid = inputPassword.equals("aaaaa888");
        }
        return isValid;
    }

    protected Group[] getRoleSets() throws LoginException
    {
        Group[] roleSets = { new SimpleGroup("Roles") };
        if (!this.guestOnly)
         //这里加入了需要的角色。
            roleSets[0].addMember(new SimplePrincipal("users"));
        roleSets[0].addMember(new SimplePrincipal("guest"));
        return roleSets;
    }

    
    @Override
    public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)
    {
        super.initialize(subject, callbackHandler, sharedState, options);
    }

    @Override
    protected String getUsersPassword() throws LoginException
    {
        return getUsername();
    }

}

 

 

 

 

三、在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自定义认证模块可以使用了。  

 

 

 

 

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
JAAS架构图 图一 JAAS概览 Jaas的认证过程懂了 LoginContext,loginModule,callBackHandler,nameC
安全性是所有可以用来对资源进行保护和验证的机制。有很多种安全模型都可以用来对数据提供保护。这
高校平台的项目已经接触了一段时间了。项目是使用maven进行管理,jboss做服务器。jar管理得好了,jb
成为开发者 string[] ArrTmp = { "token", Request["timestamp"], Request["nonce"] }; Array.Sort(
原文地址:http://www.cnblogs.com/qidian10/p/3492751.html 成为开发者 string[] ArrTmp = { "toke
第1章 SNF.CodeGenerator代码生成器简介   本项目是完全基于Spring.Net.Framework 平台进行研发。
本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 1 前言 Xcode中集成的B
简要说明 JEECG V3.0版本推翻了原有SSH2架构,采用SpringMVC+Hibernate+Spring jdbc基础架构, 采用面
本文目的 Apache Karaf项目在基于OSGi的组件框架应用开发中为开发者和架构师提供了一个便利的基础运
新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号