用户操作
[即时聊天] [发私信] [加为好友]
林三夕ID:zhengyuanting
2812次访问,排名2万外好友0人,关注者0
人的一生充满未知,即使是过去也不确切,更何况未来。
zhengyuanting的文章
原创 20 篇
翻译 0 篇
转载 25 篇
评论 2 篇
最近评论
zhengyuanting:其它dll是java类中相关native方法的实现
noevery2008:jdk/jre/bin中的其他dll文件的作用是什么?
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 编写自定义JAAS登录处理类(转载) | 旧一篇: JAAS配置介绍(转载)

    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中,可能这种方式才是最主要的,这在下篇文章中介绍。

    发表于 @ 2008年05月03日 16:22:22|评论(loading...)|编辑

    新一篇: 编写自定义JAAS登录处理类(转载) | 旧一篇: JAAS配置介绍(转载)

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Threen