[英]jboss 7 ignores security-domain options and requires password in encrypted form
我使用JBoss 7.1.1和JavaEE6。密码以加密形式存储在sql数据库中,即“ X8oyfUbUbfbEqI9IWvAW1 / 3”而不是“ admin”。 但是,如果尝试使用“管理员”密码登录,则每次都会被拒绝-服务器要求输入“ X8oyfUbUbfbEqI9IWvAW1 / 3”。
我在standalone-full.xml中使用以下选项:(我使用-c standalone-full.xml启动服务器)
<module-option name="hashAlgorithm" value="MD5"/> <module-option name="hashEncoding" value="BASE64"/> <module-option name="hashUserPassword" value="true"/> <module-option name="hashStorePassword" value="true"/>
一段时间后,我终于找到了解决方案:自定义登录模块。 它不仅简短,简单,而且提供了多种哈希算法供选择:
public class MyLoginModule extends DatabaseServerLoginModule {
private static final Logger LOGGER = Logger.getLogger(MyLoginModule.class);
@Override
protected boolean validatePassword(String inputPassword, String expectedPassword) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
LOGGER.error(e.getMessage());
}
byte[] passwordBytes = inputPassword.getBytes();
byte[] hash = md.digest(passwordBytes);
String passwordHash =
org.jboss.security.Base64Utils.tob64(hash);
LOGGER.info(expectedPassword.equals(passwordHash));
return expectedPassword.equals(passwordHash);
}
}
还有我的standalone.xml中的一个片段:
<login-module code="other.MyLoginModule" flag="required">
<module-option name="dsJndiName" value="java:/MySqlDS"/>
<module-option name="principalsQuery" value="select passwd from USERS where login=?"/>
<module-option name="rolesQuery" value="select role,'Roles' from USER_ROLES where login=?"/>
</login-module>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.