首    页 建模架构 设计模式 培训咨询 jdon框架 论坛

上一级 首页 下一级

调试配置和运行

采用J2EE容器的安全机制实现本项目的安全框架。虽然代码编程工作减少,但带来的是详细而复杂的J2EE配置,在前面章节已经分别介绍在Web容器和EJB容器下如何实现角色的访问权限限制。在Web容器中,可以指定角色对路径模式(path pattern)的访问权限;在EJB容器中,可以指定角色对具体EJB类及其方法的访问权限。

而基于数据库系统实现的用户资料管理系统则是实现与角色相关用户存储、编辑等功能,这是需要代码编程实现的。

以上容器配置和代码实现这两者之间的联系是以角色为中间纽带。在实际操作中,是通过LoginModule的配置将两者联系在一起的。

J2EE应用系统的配置分两大部分:一个是开发时的配置,如ejb-jar.xmljboss.xmlweb.xml配置等;另外一个是部署时的配置,主要完成开发配置中实现对容器资源的JNDI或其他资源调用,例如CMP对容器的数据库源JNDI调用。在开发配置中,只配置到JNDI名称,那么JNDI名称到底对应哪个具体资源,这些都需要在部署时配置J2EE服务器。

本项目中主要使用了J2EE容器的安全框架,在开发配置中,只配置到security-domain java:/jaas/ JdonSecurity,但是java:/jaas/ JdonSecurity具体是怎样实现的,还需要在部署再配置J2EE服务器。

1  JAAS配置

根据前面的架构分析知道,LoginModule是容器JAAS实现的关键,通过LoginModule,容器可以查询用户资料系统中的数据库,从而获得该用户名和密码是否与数据库中是否一致。如果一致,从数据库中获得角色名。当然这也使用于基于LDAP实现的LoginModule

首先,要配置JBoss能够访问MySQL数据库,配置JBossserver/default/deploy目录下的mysql-ds.xml文件,加入如下语句:

<local-tx-datasource>

    <jndi-name>SSODS</jndi-name>

    <connection-url>jdbc:mysql://localhost:3306/ssodb</connection-url>

    <driver-class>com.mysql.jdbc.Driver</driver-class>

    <user-name>banq</user-name>

    <password>1234</password>

  </local-tx-datasource> 

</datasources>

其中jdbc:mysql://localhost:3306/ssodb表示localhost主机上的数据库名为ssodb,访问用户名和密码分别是banq1234。这样,JBoss容器就可以访问数据库服务器了。

下面需要定制自己的LoginModule,在JBoss中已经绑定提供两个LoginModule

·          org.JBoss.security.plugins.samples.LdapLoginModule 是通过JNDI访问LDAP 服务器的LoginModule,详细用法参考JBoss使用手册。

·          org.JBoss.security.plugins.samples.DatabaseServerLoginModule是基于数据库JDBCLoginModule,基于两个基本逻辑表:Principals Roles,在Principals表中有两个字段principalID和有效的password;而Roles表中有字段principalIDRole以及RoleGroup

本项目可以直接使用DatabaseServerLoginModule作为LoginModule,配置JBoss/server/default/conf下的login-config.xml文件:

<application-policy name = "SecurityRealm">

   <authentication>

   <login-module

     code="org.JBoss.security.auth.spi.DatabaseServerLoginModule"

     flag = "required">

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

       <module-option name = "principalsQuery">

          select password from user where userId=?

       </module-option>

       <module-option name = "rolesQuery">

          select role, 'Roles' from role where userId=?

       </module-option>

     </login-module>

   </authentication>

</application-policy>

dsJndiName配置中,已经连接数据库ssodb

principalsQuery配置是实现逻辑表Principals,“select password from user where userId=?”是直接操作user数据表的SQL语句。useridpassword对应ssodb数据表User中的两个字段,同时userid又对应Principals表的principalID,而password对应Principals表的password。这是逻辑表的一个约定规定,所谓逻辑表就是要提供的SQL查询语句满足逻辑表中的字段要求。这样就将用户资料的数据库系统和容器的JAAS联系了起来,这里类似是一个钩子(HOOK)。

rolesQuery配置是实现逻辑表Roles,在其SQL语句中,也提供了与逻辑表Roles一致的字段。这样,LoginModule就可以通过这条SQL语句直接访问保存在数据库ssodb中的数据了。

配置完成JAAS,就可以在EJB容器和Web容器中使用JdonSecurity这个realm,如在jboss-web.xmljboss.xml中加入:

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

这样,整个容器的安全管理框架就可以有机地联系在一起。

邮件服务的配置

本项目中使用了邮件发送组件来发送用户丢失的密码,在开发配置中,需要3个配置在部署时配置J2EE服务器。前两个是QueueConnectionFactoryQueue,在JBoss中通过配置文件jbossmq-service.xmljbossmq-destinations-service.xml(依JBoss具体版本有所区别)设置,这些可以参考JBoss手册配置自己的设置。在本项目中,这两个设置使用了现成的JBoss配置java:/ConnectionFactorytestQueue

因此,邮件发送组件需要在部署时配置的是Mail Service资源。在开发配置的jboss.xml中,将Mail ServiceJNDI名为java:/Mail调用,那么需要在JBoss配置Mail Service,编辑JBoss/server/default/deploy下的mail-service.xml,将其中mail.smtp.host指定为一个SMTP 服务器。如果SMTP服务器需要验证,那么必须加入用户名和密码,如下:

<attribute name="User">xxxx</attribute>

<attribute name="Password">xxxx</attribute>

<property name="mail.smtp.auth" value="true"/>

SMTP 服务器是属于操作系统方面的系统设置,在Linux可以使用SendMail作为SMTP服务器,在Windows平台上可以通过管理工具配置SMTP服务器。

部署和发布

建立.ear项目文件将需要的组件如邮件发送组件打包进来复制到JBoss/server/default/deploy目录下如果没有任何错误即表示发布成功。

本项目相当多地使用了容器特性,因此整合测试显得很重要,而且可能比较麻烦,但是只要依据框架标准准确地完成本项目各个部件,运行调试时的问题还是可以基本克服。


上一级 首页 下一级



更多标签...



Jdon框架演示

JiveJdon
源码下载

VIP收费区

历史热点讨论排行榜




google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘





手机 add to google add to yahoo
联系我们 | 关于我们 | 广告联系 | 网站地图 | 设为首页

沪ICP证08026060 如有意见请与我们联系 Powered by JdonFramework
_×
您有新消息