mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-05-31 09:12:14 +00:00
Add PasswordEncoder.upgradeEncoding
Issue: gh-2778
This commit is contained in:
parent
9cef054db7
commit
02b857d82a
@ -289,6 +289,11 @@ public class AuthenticationConfiguration {
|
|||||||
return getPasswordEncoder().matches(rawPassword, encodedPassword);
|
return getPasswordEncoder().matches(rawPassword, encodedPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean upgradeEncoding(String encodedPassword) {
|
||||||
|
return getPasswordEncoder().upgradeEncoding(encodedPassword);
|
||||||
|
}
|
||||||
|
|
||||||
private PasswordEncoder getPasswordEncoder() {
|
private PasswordEncoder getPasswordEncoder() {
|
||||||
if (this.passwordEncoder != null) {
|
if (this.passwordEncoder != null) {
|
||||||
return this.passwordEncoder;
|
return this.passwordEncoder;
|
||||||
|
@ -593,6 +593,11 @@ public abstract class WebSecurityConfigurerAdapter implements
|
|||||||
return getPasswordEncoder().matches(rawPassword, encodedPassword);
|
return getPasswordEncoder().matches(rawPassword, encodedPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean upgradeEncoding(String encodedPassword) {
|
||||||
|
return getPasswordEncoder().upgradeEncoding(encodedPassword);
|
||||||
|
}
|
||||||
|
|
||||||
private PasswordEncoder getPasswordEncoder() {
|
private PasswordEncoder getPasswordEncoder() {
|
||||||
if (this.passwordEncoder != null) {
|
if (this.passwordEncoder != null) {
|
||||||
return this.passwordEncoder;
|
return this.passwordEncoder;
|
||||||
|
@ -216,6 +216,12 @@ public class DelegatingPasswordEncoder implements PasswordEncoder {
|
|||||||
return prefixEncodedPassword.substring(start + 1, end);
|
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) {
|
private String extractEncodedPassword(String prefixEncodedPassword) {
|
||||||
int start = prefixEncodedPassword.indexOf(SUFFIX);
|
int start = prefixEncodedPassword.indexOf(SUFFIX);
|
||||||
return prefixEncodedPassword.substring(start + 1);
|
return prefixEncodedPassword.substring(start + 1);
|
||||||
|
@ -42,4 +42,14 @@ public interface PasswordEncoder {
|
|||||||
*/
|
*/
|
||||||
boolean matches(CharSequence rawPassword, String encodedPassword);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,4 +198,29 @@ public class DelegatingPasswordEncoderTests {
|
|||||||
public void matchesWhenRawPasswordNotNullAndEncodedPasswordNullThenThrowsIllegalArgumentException() {
|
public void matchesWhenRawPasswordNotNullAndEncodedPasswordNullThenThrowsIllegalArgumentException() {
|
||||||
this.passwordEncoder.matches(this.rawPassword, null);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user