jboss7.1 / jbpm认证用户使用mysql5.5

时间:2014-08-20 09:52:52

标签: jboss7.x jbpm

我是jboss和jbpm的新手;我需要帮助进行jboss7身份验证。我们遇到“密码不正确/需要密码”错误。

以下是我们jboss standlone的一部分。*。xml conf。

<security-domain name="other" cache-type="default">
        <authentication>
            <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                 <module-option name="dsJndiName" value="java:jboss/datasources/jbpmDS"/>
                 <module-option name="principalsQuery" value="select passwd from users  where username=?"/>
                 <module-option name="rolesQuery" value="select userRoles 'Roles' from userroles where username=?"/>
                 <module-option name="hashAlgorithm" value="pbkdf2_sha256"/>
            </login-module>
        </authentication>
</security-domain>

我们有密码和pbkdf2_sha256加密,但不知道如何在独立* .xml中配置“pbkdf2_sha256”参数

我们使用django(v1.4 pbkdf2_sha256加密)框架来管理用户。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

基于来自here的信息,这里的实现应该与Django pbkdf2_sha256一起使用(您需要使用JBoss注册此类,而不是原始的DatabaseServerLoginModule)。请记住,我没有测试它......

public class PBKDF2WithSha256DatabaseServerLoginModule extends DatabaseServerLoginModule {
    protected boolean validatePassword(String inputPassword, String expectedPassword) {
        if(inputPassword == null || expectedPassword == null) {
            return false;
        }
        String[] encodedPassword = expectedPassword.split("\\$");
        int encodedIterations = Integer.parseInt(encodedPassword[1]);
        byte[] encodedSalt = encodedPassword[2].getBytes(Charset.forName("UTF-8"));
        String encodedHash = encodedPassword[3];
        SecretKeyFactory f = null;
        try {
            f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("Need a Java implementation with cryptography.");
        }
        KeySpec ks = new PBEKeySpec(inputPassword.toCharArray(), encodedSalt, encodedIterations, 256);
        SecretKey s = null;
        try {
            s = f.generateSecret(ks);
        } catch (InvalidKeySpecException e) {
            // Encoded password is corrupt
            return false;
        }
        if (encodedHash.equals(Base64.getEncoder().encodeToString(s.getEncoded()))) {
            return true;
        } else {
            return false;
        }
    }
}