Я использую весеннюю безопасность в веб-приложении на основе Java. Мне нужно создать экран смены пароля, где пользователь должен будет ввести старый пароль для подтверждения.Как сопоставить старый пароль при смене пароля весной?
Мне нужно проверить, соответствует ли старый пароль, введенный пользователем его старым паролем в db.
Как сделать это весной безопасности.
Ниже приведена конфигурация java для безопасности весны.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private AccessDecisionManager accessDecisionManager;
@Bean
@Autowired
public AccessDecisionManager accessDecisionManager(AccessDecisionVoterImpl accessDecisionVoter) {
List<AccessDecisionVoter<?>> accessDecisionVoters = new ArrayList<AccessDecisionVoter<?>>();
accessDecisionVoters.add(new WebExpressionVoter());
accessDecisionVoters.add(new AuthenticatedVoter());
accessDecisionVoters.add(accessDecisionVoter);
UnanimousBased accessDecisionManager = new UnanimousBased(accessDecisionVoters);
return accessDecisionManager;
}
@Override
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder passwordEncoder = new PasswordEncoder();
passwordEncoder.setStringDigester(stringDigester());
return passwordEncoder;
}
@Bean
public PooledStringDigester stringDigester() {
PooledStringDigester psd = new PooledStringDigester();
psd.setPoolSize(2);
psd.setAlgorithm("SHA-256");
psd.setIterations(1000);
psd.setSaltSizeBytes(16);
psd.setSaltGenerator(randomSaltGenerator());
return psd;
}
@Bean
public RandomSaltGenerator randomSaltGenerator() {
RandomSaltGenerator randomSaltGenerator = new RandomSaltGenerator();
return randomSaltGenerator;
}
Кроме того, когда новый пользователь создан, я задал его пароль, как показано ниже.
user.setPassword(passwordUtils.encryptUserPassword(user.getPassword()));
@Component("passwordUtil")
public class PasswordUtils {
@Autowired
private PooledStringDigester _stringDigester;
public String encryptUserPassword(String originalPassword) {
String encryptedPassword = _stringDigester.digest(originalPassword);
return encryptedPassword;
}
}