SHA-1哈希无法使用自定义REALM以jboss格式进行身份验证

时间:2015-09-23 05:15:04

标签: java security authentication jboss

在我的应用程序中,使用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>

2 个答案:

答案 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以获取有关错误的更多详细信息。