繁体   English   中英

Java Spring Security PasswordEncoder

[英]Java Spring Security PasswordEncoder

我在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?

提前致谢

我不认为这样做是出于特定原因。 我认为这更多是因为开发人员无意在更高版本上进行更改。

在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为null,并且第79行的语句为String pass1 = encPass; 而不是它,第81行将抛出NPE

但是,在较新的版本(您正在查看的版本)中,使用了PasswordEncoderUtils中的equals,它已经解决了encPass可能为null的情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM