-1
자바 기반 웹 응용 프로그램에서 스프링 보안을 사용하고 있습니다. 확인을 위해 이전 비밀번호를 입력해야하는 비밀번호 변경 화면을 만들어야합니다.봄 보안에서 암호를 변경하는 동안 이전 암호를 일치시키는 방법은 무엇입니까?
사용자가 입력 한 이전 암호가 db의 이전 암호와 일치하는지 확인해야합니다.
봄 보안에서는 어떻게합니까?
다음은 내 스프링 보안 자바 설정입니다.
@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;
}
}