在我的项目一开始的时候由于时间关系,没能摸清楚如何实现用自己写的模块处理登录,所以就采用了比较简单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主目录下的serverdefault deploy目录 (什么?你的目录下没有找到这个文件,没关系,从你的JBoss主目录的docsexamplesjca下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角色的用户才能访问。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
为什么开源企业的开源大旗正在褪色
最近这几年,开源一直是人们比较关注的话题,不过现在也该到冷静下来进行思考的时候了,真正的开源公司已经利用开源赚得盆满钵盈。
-
优化Jboss EAP平台的12项最佳实践
在过去几年里,NBC环球电影公司的Web架构团队牺牲了可观的时间和资源去改善其高度分布的企业架构。Richir Choudhry、Alpesh Vaghela……
-
开源PaaS技术手册
开源业界向来不太平,关于诸多技术的开源未来足以让很多粉丝兴奋躁动起来。商业软件开始揉进开源技术,开源技术也成为IT大佬们得基础架构,这一种趋势蔓延的缓慢有有力。在广告漫天飞得云计算中,开源的分量有多重?是否走向云端就意味着走向开源?开源的PaaS如何选择?如何为开源项目选择PaaS厂商?哪些服务平台值得我们关注,下面我们一一来揭晓。
-
你的Java开发工具包有没有MVEL?
MVEL最初是Mike Brock的Valhalla项目的表达计算器。Valhalla本身是一个早期的Seam,就像为自动化“out of the box”web应用而生的框架,虽然Valhalla现在是休眠状态……