2016-03-22 7 views
0

私は春のセキュリティを使用しており、ログインにはuserDetailServiceとpasswordEncoderを使いたいと思います。春のセキュリティがuserDetailServiceとpasswordEncoderを使用してログに記録できない

ユーザーの作成は正常に動作します。私はそこに私のデータベースにパスワードをBCryptユーザーがいます。私は同じPasswordEncoderを使用して、ログオンするユーザーとしてユーザーを作成します。ここで

は私SecurityConfigです:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private IUtilisateurService utilisateurService; 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(utilisateurService) 
    .passwordEncoder(passwordEncoder()) 
    ; 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http 
    // 
     .csrf().disable() 
     // 
     .authorizeRequests()// 
     .antMatchers(HttpMethod.GET, "/**").permitAll()// 
     .antMatchers(HttpMethod.POST, "/**").authenticated()// 
     .antMatchers(HttpMethod.PUT, "/**").authenticated()// 
     .antMatchers(HttpMethod.DELETE, "/**").authenticated()// 
     .anyRequest().permitAll()// 
     .and()// 
     .httpBasic().and()// 
     .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
    } 

    @Bean 
    public PasswordEncoder passwordEncoder() { 
    return new BCryptPasswordEncoder(10); 
    } 

} 

そしてUserDetailsS​​erviceを拡張IUtilisateurServiceの実装で:

@Service("utilisateurService") 
public class UtilisateurServiceImpl implements IUtilisateurService { 

    private static final ILogger LOG = LoggerImpl.getILogger(UtilisateurServiceImpl.class); 

    private IUtilisateurDao utilisateurDao; 

    private Mapper mapper; 

    private PasswordEncoder passwordEncoder; 

    @Autowired 
    public UtilisateurServiceImpl(IUtilisateurDao utilisateurDao, Mapper mapper, PasswordEncoder passwordEncoder) { 
    super(); 
    this.utilisateurDao = utilisateurDao; 
    this.mapper = mapper; 
    this.passwordEncoder = passwordEncoder; 
    } 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
    UtilisateurEntity utilisateur = utilisateurDao.getUtilisateurFromLogin(username); 
    String methodName = "loadUserByUsername"; 
    if (utilisateur == null) { 
     String msg = String.format("Aucun utilisateur avec le login %s n'a pu être trouvé", username); 
     LOG.warning(methodName, msg); 
     throw new UsernameNotFoundException(msg); 
    } 
    return new UtilisateurUserDetail(utilisateur); 
    } 

    @Override 
    public void saveNewUtilisateur(String login, String motDePasse) { 
    String methodName = "saveNewUtilisateur"; 
    if (StringUtils.isBlank(login) || StringUtils.isBlank(motDePasse)) { 
     String message = "Le login et le mot de passe sont obligatoires"; 
     LOG.warning(methodName, message); 
     throw new IllegalArgumentException(message); 
    } 
    UtilisateurEntity utilisateur = new UtilisateurEntity(); 
    utilisateur.setLogin(login); 
    utilisateur.setMotDePasse(passwordEncoder.encode(motDePasse)); 
    LOG.info(methodName, String.format("Sauvegarde du nouvel utilisateur %s", login)); 
    utilisateurDao.saveNewUtilisateur(utilisateur); 
    } 
    ... 

このステップは、私は私のコードで固定されたユーザー/パスワードでinMemoryAuthenticationを使用する前に。今私はハッシュされたパスワードでデータベースに格納された情報を使用したいと思います。

答えて

0

最後に解決策が見つかりました。 問題は春のセキュリティから来ていませんでした。それはアプリケーションの他の部分にありました。誰かがこのコードを再利用したい場合、それは機能します!

関連する問題