我在Glassfish中使用它,如果我不对我的密码进行哈希(因此它们是纯文本),它可以正常工作。
但是,如果我尝试使用散列,我无法让它工作。在我的Java代码中,当我创建一个新用户时,我像这样散列密码(使用charset编码的默认值)
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] hashedPassword = md5.digest(password.getBytes());
return new String(hashedPassword);
在领域的属性中,我将“password.digest”属性设置为MD5。
注意,我将在现实中使用SHA-512但是为了简单起见我正在尝试MD5,因为它在FlexibleJDBCRealm的文档中提到过。
有什么想法吗?感谢
PS现在有一个包含在Java中的这种领域的更“官方”版本吗?如果在某些时候将FlexibleJDBCRealm(或类似的)内置到Java EE中,那将是很好的。
答案 0 :(得分:0)
我做错了两件事:
我没有一直使用charset编码。我现在使用Charset.defaultCharset()。name(),它也是FJDBCR使用的默认值:
MessageDigest sha = MessageDigest.getInstance("MD5");
byte[] digestedPassword = sha.digest(password.getBytes(Charset.defaultCharset().name()));
return new String(digestedPassword, Charset.defaultCharset().name());
注意它在上面的代码中用于第二行和第三行。
我也没有设置password.encoding属性(假设TEXT将用作默认值)。
现在一切正常。接下来要添加种子,并使用SHA-512,我应该启动并运行