Add PasswordEncoder.upgradeEncoding
Issue: gh-2778
This commit is contained in:
+6
@@ -216,6 +216,12 @@ public class DelegatingPasswordEncoder implements PasswordEncoder {
|
||||
return prefixEncodedPassword.substring(start + 1, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean upgradeEncoding(String encodedPassword) {
|
||||
String id = extractId(encodedPassword);
|
||||
return !this.idForEncode.equalsIgnoreCase(id);
|
||||
}
|
||||
|
||||
private String extractEncodedPassword(String prefixEncodedPassword) {
|
||||
int start = prefixEncodedPassword.indexOf(SUFFIX);
|
||||
return prefixEncodedPassword.substring(start + 1);
|
||||
|
||||
+10
@@ -42,4 +42,14 @@ public interface PasswordEncoder {
|
||||
*/
|
||||
boolean matches(CharSequence rawPassword, String encodedPassword);
|
||||
|
||||
/**
|
||||
* Returns true if the encoded password should be encoded again for better security,
|
||||
* else false. The default implementation always returns false.
|
||||
* @param encodedPassword the encoded password to check
|
||||
* @return true if the encoded password should be encoded again for better security,
|
||||
* else false.
|
||||
*/
|
||||
default boolean upgradeEncoding(String encodedPassword) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+25
@@ -198,4 +198,29 @@ public class DelegatingPasswordEncoderTests {
|
||||
public void matchesWhenRawPasswordNotNullAndEncodedPasswordNullThenThrowsIllegalArgumentException() {
|
||||
this.passwordEncoder.matches(this.rawPassword, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void upgradeEncodingWhenEncodedPasswordNullThenTrue() {
|
||||
assertThat(this.passwordEncoder.upgradeEncoding(null)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void upgradeEncodingWhenNullIdThenTrue() {
|
||||
assertThat(this.passwordEncoder.upgradeEncoding(this.encodedPassword)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void upgradeEncodingWhenIdInvalidFormatThenTrue() {
|
||||
assertThat(this.passwordEncoder.upgradeEncoding("{bcrypt"+ this.encodedPassword)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void upgradeEncodingWhenSameIdThenFalse() {
|
||||
assertThat(this.passwordEncoder.upgradeEncoding(this.bcryptEncodedPassword)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void upgradeEncodingWhenDifferentIdThenTrue() {
|
||||
assertThat(this.passwordEncoder.upgradeEncoding(this.noopEncodedPassword)).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user