2012-12-11 68 views
0

我注意到Md4PasswordEncoder Spring Security的下面的代碼:的Java Spring Security中的PasswordEncoder

/** 
* 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。可以請任何人解釋爲什麼春天的開發人員通過向傳入的對象中添加一個空字符串來處理null?

在此先感謝

回答

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可能爲空的情況。

因此,我認爲"" +在當前版本中是多餘的,並沒有特殊原因留在那裏。 (也許是因爲它沒有破壞任何東西,也不是造成重大性能損失的原因)