配置JBoss如何从数据库里读取信息

 
   | |

导读:本文介绍配置JBoss如何从数据库里读取登录用户的验证信息。包括配置login-config.xml,配置连接池等。

关键词:JBoss MD5 Base64

 
正在加载数据...

  在我的项目一开始的时候由于时间关系,没能摸清楚如何实现用自己写的模块处理登录,所以就采用了比较简单RDBMS(即用JBoss的 DatabaseServerLoginModule)模块处理登录事件,然后通过一个过滤器判断用户是否已经登录,如果登录了再从数据库中读取用户信息到session中。虽然自己都感觉到有点不伦不类,但我还是将我的具体实现方式在下面写出来:

  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> 

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

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

  2.配置连接池

  上面的文件中用到了一个名为testds的连接池,现在就来配置这个连接池。我这里用的是oracle数据库,其它的数据库的配置方式就不一一介绍了。具体的表结构和建表的sql语句我这里也不再描述了,如果有不清楚的地方清留言问我。编辑JBoss主目录下的server\default \deploy目录 (什么?你的目录下没有找到这个文件,没关系,从你的JBoss主目录的docs\examples\jca下copy一个过来)。在<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.配置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.配置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> 

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


JBoss 4.0简化了中间件的开发
 JBoss 4.0 简化了中间件的开发(一)
 JBoss 4.0 简化了中间件的开发(二)
 JBoss用EAP 5.0实现组件化
 Java平台的企业级Ruby解决方案:JBoss的TorqueBox
 JBoss的两种类隔离机制配置说明
 浅谈如何将EJB部署在Jboss下
 配置JBoss如何从数据库里读取信息

原文出处:http://developer.51cto.com/art/200906/129638.htm
 
来源:51cto    作者:贾富东    
 
 
 
 
 

JBoss Web服务

 
在每年的用户会议上,凭借其企业级应用平台(EAP)5.0,红帽的JBoss集团围绕核心JBoss微容器进行努力,已经可以与各种编程模型对接……
 
数据服务存在的问题造成SOA性能受到影响。红帽公司的Craig Muzilla对一些常见的数据服务问题以及关于开源治理的未来目标进行了探讨。
 
如果你正在吹捧面向服务的架构,Frank Cohen相信你将需要改变一下步调才能成功地从实验品走向的产品。他的项目FastSOA是一种不同的架构,它利用了XML查询语言(XML Query Language,XQuery),并在中间层使用了本地XML数据库来处理J2EE应用服务器的可扩展性和性能问题。
 
在JavaOne大会上,JBoss公司产品主管Pierre Fricke并没有谈与Red Hat公司合并一事。他谈到了支持新的Java EE5的第一版JBoss Seam,并且他还谈到了Seam与Ajax的前景以及JBoss将加入NetBeans社区。
 
Linux的先驱者Red Hat收购了开放源码中间件供应商Jboss。在上周的两家公司的CEO的远程电话会议上发布了这个合并的消息,这将会形成一个主要的新SOA供应商。

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录