在JBoss中配置自定义JAAS模块(转载)

本文详细介绍如何在JBoss中配置数据库认证模块,并设置连接池、安全性策略等,以实现Web应用的安全登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.     1、配置login-config.xml

编辑Jboss主目录下的 server/default/conf 目录下的login-config.xml文件,在<policy>节点下加入如下的内容:

 <policy>….

 <application-policy name = "nccnm">

       <authentication>

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

             <!--配置访问数据库的连接池名称为cnmtestds -->

             <module-option name = "dsJndiName">java:/ testds</module-option> 

             <!--配置根据登录名获取密码的sql语句 -->

             <module-option name = "principalsQuery">SELECT PASSWORD FROM OPERATOR WHERE LOGINID=?</module-option>

<!--配置根据登录名获取用户角色的sql语句 -->

             <module-option name = "rolesQuery">SELECT ROLENAME,'Roles' FROM V_ROLE WHERE LOGINID=?</module-option>

             <!--使用MD5方式加密密码 -->

             <module-option name="hashAlgorithm">MD5</module-option>

              <!--将加密后的密码再转为base64编码 -->

             <module-option name="hashEncoding">base64</module-option>            

          </login-module>

 </authentication>

</application-policy>

….

</policy>

     在这里顺便简单介绍一下MD5Base64MD5是一种不可逆的编码算法,即你不可能由已经加密的密码字符串来根据固定的算法还原出原来的密码,据说现在的银行系统大多数采用这种方式来储存用户密码,所以如果用户的密码遗失了,银行也不可能通过查数据库给你找回你原来设的密码,只能重新设置。要破解MD5的密码只能用很笨很好时的穷举法。

       Base64的编码其实大家都应该经常接触,我们的电子邮件一般都是经过Base64编码后传送的,如果您用的是Outlook Express收发邮件,那你可以通过邮件的属性/详细信息/邮件来源看到邮件的Base64编码的信息。它将二进制数据编码为字母和数字,因为字母和数字的个数少于256,所以它是把3个字节的二进制数据转换为4个字节的字母和数字。所以经过base64编码的文件会比原来的文件大4/3倍。Jboss用专门的API来处理md5加密及base64的编码和反编码。

      

2.       2、配置连接池

      上面的文件中用到了一个名为testds的连接池,现在就来配置这个连接池。我这里用的是oracle数据库,其它的数据库的配置方式就不一一介绍了。具体的表结构和建表的sql语句我这里也不再描述了,如果有不清楚的地方清留言问我。

编辑JBoss主目录下的server/default/deploy目录 (什么?你的目录下没有找到这个文件,没关系,从你的Jboss主目录的docs/examples/jcacopy一个过来)。在<datasources>节点之间加入如下内容:

 

 <local-tx-datasource>

    <jndi-name>testds</jndi-name>

    <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:mydb</connection-url>

    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>

    <user-name>test</user-name>

    <password>123</password>

    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>

      <metadata>

         <type-mapping>Oracle9i</type-mapping>

      </metadata>

 </local-tx-datasource> 

 

3.      3、 配置jboss-web.xml

JBoss下的配置就完成了,下面再配置我们的项目里的文件。

打开你的Web应用下的Web目录下的的WEB-INF目录,新建一个jboss-web.xml的文件,在文件中加入如下内容:

<jboss-web>

  <!-- Uncomment the security-domain to enable security. You will

      need to edit the htmladaptor login configuration to setup the

      login modules used to authentication users.

   -->

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

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

</jboss-web> 

这个配置会告诉Jboss我们这个应用的JAAS安全性策略到哪里去找。

 

4.       4、配置web.xml

打开你的Web应用下的Web目录下的的WEB-INF目录,编辑web.xml (这个文件应该能找到吧?如果找不到就麻烦了,从头去啃J2EE),加入如下的内容:

 

 <security-constraint>

    <web-resource-collection>

      <web-resource-name>login required</web-resource-name>

      <url-pattern>*.jsp</url-pattern>

      <url-pattern>*.htm</url-pattern>

      <url-pattern>*.html</url-pattern>

      <url-pattern>*.do</url-pattern>

    </web-resource-collection>

    <auth-constraint>

      <role-name>role1</role-name>

    </auth-constraint>

 </security-constraint>

 <login-config>

       <!-- 通过表单方式来提交登录 -->

    <auth-method>FORM</auth-method>

    <realm-name>mydomain</realm-name>   

<form-login-config>

       <!-- 登录页面为login.jsp -->

      <form-login-page>/login.jsp</form-login-page>

             

              <!--登录出错的话转到error.jsp页面 -->

      <form-error-page>/error.jsp</form-error-page>

    </form-login-config>

 </login-config>

 <security-role>

    <role-name>role1</role-name>

 </security-role>

 

以上内容的作用是本Web应用下的所有jsp,htm,html,do为扩展名的资源都要登录后才能访问(你可以根据你的需要来设置,通常你可以设置<url-pattern>* </url-pattern>来限制没有登录所有的资源都不能访问),而且只有role1角色的用户才能访问。

 

如果我想要某些jsp页面不登录也能访问怎么办?我是这样处理的,也不知道是不是歪门邪道,再加一个security-constraint策略:

 <security-constraint>

    <web-resource-collection>

      <web-resource-name>not login required</web-resource-name>

      <url-pattern>/report/*</url-pattern>

        <url-pattern>/css/*</url-pattern>

    </web-resource-collection>

 </security-constraint> 

 

这样你的Web应用下的reportcss目录下的任何资源都不需要登录就可以访问了。

 

5.     5、 配置登录页面

Web应用的主目录下新建一个login.jsp文件,加入如下内容:

<%@ page contentType="text/html; charset=GBK" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GBK">

<title>登录页面</title>

</head>

<body>

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

<table width="100%" border="0" cellspacing="2" cellpadding="3">

 <tr><td>

<input type="text" name="j_username" style="width:170px">

 </td> </tr>

 <tr><td>

<input type="password" name="j_password" style="width:170px">

     </td>

   </tr>

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

 </table>

</form>

</body>

</html>

  

OK,现在大功告成,把你的Web应用发布到Jboss下试试吧。

如何实现自己编写的登录模块,如何把用户信息保存到session中,可能这种方式才是最主要的,这在下篇文章中介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值