[英]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.