0

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 を処理する理由を誰か説明してもらえますか?

前もって感謝します

4

1 に答える 1

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    }

このバージョンでは、 ifencPassが null で、79 行目のステートメントが本来String pass1 = encPass;のものではなく だった場合、81 行目でNPE.

ただし、後のバージョン (あなたが見ているもの) では、PasswordEncoderUtilsencPassの equals が使用されており、null になる可能性のあるケースを既に処理しています。

"" +したがって、現在のバージョンでは冗長であり、特別な理由もなく残されていると思います。(おそらく、何も壊れておらず、重大なパフォーマンス低下の理由ではないため)

于 2012-12-11T16:03:27.707 に答える