开始的时候总是觉得jaas是个很神奇的东西,正好有本书上介绍这个相关的例子,于是按照书上的步骤坐下来似乎也不是那么的复杂,下面是关于jaas与jboss整合的步骤
(1)首先需要在jboss中配置实用RDBMS的方式来管理数据库中的用户和角色,其工作主要包括要在 \jboss-5.1.0.GA\server\default\conf\login-config.xml 中添加对安全管理的配置
<application-policy name="htool"> <authentication> <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> <module-option name = "dsJndiName">java:/firstds</module-option> <module-option name = "principalsQuery">SELECT password FROM users_table WHERE username = ?</module-option> <module-option name = "rolesQuery">select userroles from roles_table where username=?</module-option> <module-option name="hashAlgorithm">MD5</module-option> <module-option name="hashEncoding">base64</module-option> <module-option name="hashEncoding">HEX</module-option> <module-option name="hashAlgorithm">SHA-1</module-option> <module-option name="digestCallback">com.myclass.MyDigestCallback</module-option> </login-module> </authentication>
(2)步骤一主要是在服务器中配置怎么样去控制,这一步骤中主要配置的就是什么角色可以访问该应用,或者是什么样的角色拥有什么样的权限,以及对登陆方式的设置,以下是相关的修改,主要是关于web.xml文件的修改
<!-- 为该应用声明安全性角色 --> <security-role> <role-name>crazyit</role-name> </security-role> <security-constraint> <!-- 定义受保护的Web资源集 --> <web-resource-collection> <!-- 定义Web资源集的名称 --> <web-resource-name>test</web-resource-name> <!-- 匹配该URL模式的资源都处于被保护状态下 --> <url-pattern>/*</url-pattern> <url-pattern>/html/*</url-pattern> </web-resource-collection> <auth-constraint> <!-- 访问受保护资源所需的角色 --> <role-name>crazyit</role-name> </auth-constraint> </security-constraint>
(3)在数据库中添加创建相关的表,以及插入相应的记录
create table users_table( userid int auto_increment primary key, username varchar(64) unique, password VARCHAR(64) ); create table roles_table ( roleid int auto_increment primary key, username varchar(64), userRoles varchar(32) ); # 插入一个用户 insert into users_table values(null, 'yeeku','123'); # 插入一个用户,以及它对应的角色 insert into roles_table values(null ,'yeeku','crazyit');
(4) 需要通知jboss那些安全域被使用
WEB-INF/jboss-web.xml 的内容如下
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web> <!-- 指定该Web应用使用哪个安全域 --> <security-domain>java:/jaas/htool</security-domain> <!--应用的路劲--> <context-root>WebHtool</context-root> </jboss-web>
(1)虽然login-module添加的是"org.jboss.security.auth.spi.DatabaseServerLoginModule" 但是在启动的过程中报了user.properities文件找不到的问题
这个问题主要是取roles的sql写的有问题DatabaseServerLoginModule 的特性可以参考https://community.jboss.org/wiki/DatabaseServerLoginModule