Java Spring Security PasswordEncoder

时间:2012-12-11 13:33:59

标签: java spring-security

我在Spring Security的Md4PasswordEncoder中注意到以下代码:

/**
 * Takes a previously encoded password and compares it with a raw password after mixing in the salt and
 * encoding that value.
 *
 * @param encPass previously encoded password
 * @param rawPass plain text password
 * @param salt salt to mix into password
 * @return true or false
 */
public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
    String pass1 = "" + encPass;
    String pass2 = encodePassword(rawPass, salt);
    return PasswordEncoderUtils.equals(pass1,pass2);
}

我正在开发自定义PasswordEncoder。可以请任何人解释为什么Spring开发人员通过向传入的对象添加一个空字符串来处理null?

提前致谢

1 个答案:

答案 0 :(得分:1)

我认为这不是出于特定原因。我认为这更多是因为开发人员并不关心在以后的版本中进行更改。

在版本3.0.3之前,这就是代码的外观(Source):

78    public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
79        String pass1 = "" + encPass;
80        String pass2 = encodePassword(rawPass, salt);
81        return pass1.equals(pass2);
82    }

在此版本中,如果encPass为空且第79行上的语句为String pass1 = encPass;而不是它,则第81行会抛出NPE

但是,在更高版本(您正在查看的版本)中,使用了来自PasswordEncoderUtils的等于已经处理encPass可能为空的情况。

因此,我认为"" +在当前版本中是多余的,并且没有特殊原因留在那里。 (也许是因为它没有破坏任何东西,也不是导致重大性能损失的原因)