对于内部的Tomcat/Java/Struts应用程序,我们将自定义编写的身份验证代码转换为使用JDBCRealm。数据库为MySQL 5.0,密码以PASSWORD()-encrypted字符串形式存储。在我们的MySQL版本中,PASSWORD() function是一个非标准的(专有的)41字节的散列。(我现在知道我们不应该使用它作为我们的密码,而应该使用SHA1()或MD5()。但我们到了这里。)
有没有办法在不强制所有用户重新输入密码的情况下使用JDBMRealm,以便我们可以对其重新编码?是否有允许我们根据PASSWORD()-encoded password列进行身份验证的JDBCRealm摘要?
发布于 2009-08-07 16:55:11
新的MySQL版本provide a function称为OLD_PASSWORD(),它以一种向后的方式消化密码-与4.0和更早版本兼容。
因此,您所能做的就是以这样一种方式进行configure JDBCRealm:
digest attribute.OLD_PASSWORD()函数对密码进行加密。您必须扩展JDBCRealm,此功能不是开箱即用的。对于Tomcat6.0,您必须重写authenticate(Connection c, String username, String credentials)方法。您还可以使用上面的方法作为迁移策略的一部分:让被覆盖的方法同时支持OLD_PASSWORD()和digest,并强制使用OLD_PASSWORD()进行身份验证的用户更改其密码。随着时间的推移,您将有望切换到标准的基于摘要的方法。
https://stackoverflow.com/questions/1244607
复制相似问题