2009-11-24 79 views
2

继续关注prior question,我试图弄清楚如何为J2EE应用程序设置基于容器的身份验证。具体来说,我需要能够应用除java.security.MessageDigest(即SHA,MD2或MD5 - here's where I think that limitation is documented)支持的密码摘要算法之外的密码摘要算法。在这种情况下,我的数据库存储Blowfish加密的密码。使用其他摘要方法配置基于容器的身份验证

我已经编写了Java代码以从我的数据库获取加密密码,并通过执行Blowfish加密将用户输入的密码与数据库中的密码进行比较。如何设置它以便容器只使用我自己的Java类来执行用户身份验证?

我正在使用JBoss AS 5.1(我认为这意味着我的Tomcat版本是6)。

回答

2

你将需要为JBoss编写一个custom LoginModule

在你的情况下,它应该是微不足道的,因为你所要做的只是改变密码的编码方式,所以你只需扩展DatabaseServerLoginModule并覆盖上面链接显示的例子中的一个方法。

如果你要做一个独立的Tomcat,你必须写your own Realm。再次,合理简单,因为您可以扩展JDBC或数据源领域

+0

我可以在不改变conf/login-config.xml的情况下做到吗?将选择写入该文件真的很难看,特别是当我已经有一些非常好的Java代码(EJB3 + POJO)来抓取用户信息的时候。 – 2009-11-24 22:55:59

+0

你可以自己实现'LoginModule',而不是扩展'DatabaseServerLoginModule',然后根据需要检索用户信息。虽然我不确定是否可以从LoginModule访问EJB,但是自从我和JBoss合作以来,这已经很长了;这可能已经改变了。 – ChssPly76 2009-11-24 23:07:28

+0

鉴于在任何这方面找到有用的文档都很困难,我现在要坚持扩展DatabaseServerLoginModule。你有关于'rolesQuery'模块选项应该包含什么的链接?我没有包含任何“角色”数据的数据库表,所以我失去了如何处理这个问题。我试着返回一个等于我DD中定义的security-role的常量字符串,并且我也尝试完全忽略该行,但是无论是哪种方式登录都会抛出IOException:'找不到属性文件:users.properties或defaults:defaultUsers.properties '。 – 2009-11-24 23:44:24

0

我已经能够在网上找到有关编写自定义登录模块的所有文档仅适用于JBoss v4或更早版本。我一直无法找到在JBoss v5.1中执行此操作的单个示例。这是非常令人沮丧的。没有JBoss v5.1的javadoc,我可以在官方的JBoss网站找到;事实上,在网络上的任何地方都没有关于定制模块的当前安全文件。我已经搜遍了我在巴恩斯&诺贝尔获得的每本书,但仍然没有运气。在这一点上,我们正在考虑脱离JBoss,因为缺乏文档是不专业的。