Glassfish 4 中的密码加密算法
Posted
技术标签:
【中文标题】Glassfish 4 中的密码加密算法【英文标题】:Password Encryption Algorithm in Glassfish 4 【发布时间】:2014-05-08 23:44:51 【问题描述】:我最近将 Glassfish 从 3.1.2 更新到 4.0,并想设置一个我之前在我的应用程序上使用的 JDBCRealm,它使用基于 FORM 的身份验证。密码在数据库中使用 SHA-256 进行哈希处理(这是默认的摘要算法选项)。
领域具有在此 Glassfish 版本中成为必需的属性:密码加密算法。令人难以置信的是,Glassfish 官方文档说它是可选的,并且输入字段下的注释说将其留空是有风险的,但是您不能将其留空,因为它是强制性的。
无论我在此属性中设置什么,我都无法登录之前运行的应用程序。 (这对新注册用户和老用户都是如此。)我在谷歌上搜索了好几天,但找不到该字段的选项。有哪些选择?
另外,我将 Glassfish 与 mysql 一起使用。 Glassfish 是否将加密的散列密码发送到数据库,或者只是对 MySQL 的一些指令,以使用这种加密存储散列密码?
This question 对我有所帮助,但没有解决我的问题。
更新:实际上,我不使用经典的基于 FORM 的身份验证,而是使用 HttpServletRequest#login()
进行编程登录的自定义 JSF 表单,但我认为这在这个问题上并不重要。
【问题讨论】:
你试过“无”吗? 【参考方案1】:我已经使用 Glassfish 4.1 和为 MySQL 配置的 JDBC 领域测试了一个简单的用例。
你可以建立一个简单的用户表:
name:存储用户名 password:存储用户密码的SHA-256哈希 密码(不加盐) group:存放用户组(即admin、user)即
INSERT INTO users (name, password, group) VALUES ("admin", SHA2("password", 256), "admins");
在管理控制台中,转到配置 > 安全 > 领域并编辑您的领域。
在“密码加密算法”字段中输入“AES”。
在“摘要算法”字段中输入“SHA-256”。
在“字符集”字段中输入“UTF-8”。
【讨论】:
对我不起作用。我的日志说:Severe: jdbcrealm.invaliduser
和 Warning: WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
。已经尝试解决了几个小时,尝试了几种不同的密码加密算法组合等。以上是关于Glassfish 4 中的密码加密算法的主要内容,如果未能解决你的问题,请参考以下文章