在我的应用程序中,使用SHA-1
加密密码public static String passwordEncryption(String password){
MessageDigest md =null;
try {
md= MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md.update(password.getBytes());
byte[] mdbytes = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
我正在使用具有自定义领域的基于Jboss表单的身份验证,现在的问题是,即使使用正确的密码也不会登录用户,每次都会重定向到错误页面。
我在standalone.xml中的领域是
<security-domain name="testRealm" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/sbos"/>
<module-option name="principalsQuery" value="SELECT PASSWORD FROM USER WHERE NAME = ?"/>
<module-option name="hashAlgorithm" value="SHA-1"/>
<module-option name="hashEncoding" value="base64"/>
<module-option name="rolesQuery" value="SELECT 'Manager','Manager' FROM user WHERE name = ?"/>
</login-module>
</authentication>
</security-domain>
答案 0 :(得分:1)
默认情况下,hashEncoding的值为base64。你必须通过将hashEncoding更改为十六进制来解决这个问题,因为SHA-1使用十六进制编码。
<module-option name="hashAlgorithm" value="SHA-1"/>
<module-option name="hashEncoding" value="hex"/>
答案 1 :(得分:0)
我建议您向安全域添加一个审核元素,如下所示:
<audit>
<provider-module code="LogAuditProvider"/>
</audit>
然后在子系统日志记录下添加以下内容(如果尚未存在):
<periodic-rotating-file-handler name="AUDIT" autoflush="true">
<level name="TRACE"/>
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="audit.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="org.jboss.security">
<level name="TRACE"/>
<handlers>
<handler name="AUDIT"/>
</handlers>
</logger>
然后您可以查看audit.log以获取有关错误的更多详细信息。