SHA-1 哈希在 jboss 使用自定义 REALM 的基于表单的身份验证中不起作用

SHA-1 hashing not working in jboss form based authentication using custom REALM

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

我建议您将审计元素添加到您的安全域,如下所示:

    <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 以了解有关您的错误的更多详细信息。

hashEncoding默认值为base64。你必须通过将 hashEncoding 更改为 hex 来解决这个问题,因为 SHA-1 使用十六进制编码。

<module-option name="hashAlgorithm" value="SHA-1"/>
<module-option name="hashEncoding" value="hex"/>