내 응용 프로그램에 사용자 로그인 확인 기능을 추가하고 싶습니다. 내 웹 사이트는 복잡한 해시를 사용하여 실제 비밀번호를 규칙적으로 변환 한 다음 데이터베이스에 저장하는 또 다른 웹 사이트를 기반으로합니다. 정규는 염을 생성하고 다음과 같이 사용자 테이블에 저장 :Spring Security의 JdbcAuthentication에서 데이터베이스의 사용자 데이터를 얻는 방법?
String salt = HashKit.generateSaltForSha256();
password = HashKit.sha256(salt + password);
user.setPassword(password).setSalt(salt).save();
사용자가 로그인 할 때, 원래의 응용 프로그램은이 같은 데이터베이스에서 소금을 얻을 것이다 : 지금
User user = dao.find(username);
password = HashKit.sha256(user.getSalt() + password);
if (password.equels(user.getPassword())){ Login Success! }
하지만, 나는 응용 프로그램을 다시 작성하는 봄 부팅을 사용하여 원하는,이 같은 봄 보안 로그인을 검증하기 위해 사용
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DruidPlugin druidPlugin;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(druidPlugin.getDataSource())
.usersByUsernameQuery(
"select userName username, password, true from account where userName=?"
)
.authoritiesByUsernameQuery(
"select userName username, 'ROLE_USER' from account where userName=?"
)
.passwordEncoder(new PasswordEncoder() {
@Override
public String encode(CharSequence password) {
String salt = HashKit.generateSaltForSha256();
password = HashKit.sha256(salt + password);
return password.toString();
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return false;
}
});
}
}
어떻게 PasswordEncoder
에 데이터베이스에서 사용자 데이터를받을 수 있나요?