2017-12-29 70 views
-1

내 응용 프로그램에 사용자 로그인 확인 기능을 추가하고 싶습니다. 내 웹 사이트는 복잡한 해시를 사용하여 실제 비밀번호를 규칙적으로 변환 한 다음 데이터베이스에 저장하는 또 다른 웹 사이트를 기반으로합니다. 정규는 염을 생성하고 다음과 같이 사용자 테이블에 저장 :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에 데이터베이스에서 사용자 데이터를받을 수 있나요?

답변

0

제 생각에는 DaoAuthenticationProvider이 문제를 해결해야합니다. 서비스 인스턴스와 암호 엔코더를 제공해야합니다.

일단 구성되면 AuthenticationManagerBuilder를 설정해야합니다.

@Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
      auth.authenticationProvider(authProvider()); 
    } 

참조 here