2017-11-15 12 views
0

私は自分のアプリケーションでSpring Securityを使用しようとしていますが、登録が成功するたびにサインインする際に問題が発生します。 Springは私をfailureUrlにリダイレクトします。私は自分の間違いを探して疲れています。私に適切な方法を教えてください。私は本当に感謝しています。セキュリティの設定とコードがあります:春のセキュリティ - 常に失敗URLにリダイレクト

@Configuration 
public class SecurityConfig extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    private RegisterService registerService; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .csrf().disable() 
       .authorizeRequests() 
       .antMatchers(
         "/registration", 
         "/js/**", 
         "/css/**", 
         "/img/**", 
         "/webjars/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
       .formLogin() 
       .loginPage("/login") 
       .failureUrl("/login?error") 
       .permitAll() 
       .and() 
       .logout() 
       .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login"); 
    } 

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

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

} 

とサービスあなたの構成でdefaultSuccessUrlを追加してみてくださいサインアップのためと

@Service 
public class RegisterService implements UserDetailsService { 

    @Autowired 
    private BCryptPasswordEncoder passwordEncoder; 

    @Autowired 
    private UserRepository userRepository; 

    public User save(UserDto userDto){ 
     User user = new User(); 
     user.setLogin(userDto.getLogin()); 
     user.setFirstName(userDto.getFirstName()); 
     user.setLastName(userDto.getLastName()); 
     user.setEmail(userDto.getEmail()); 
     user.setPassword(passwordEncoder.encode(userDto.getPassword())); 
     user.setRole("ROLE_USER"); 
     return userRepository.save(user); 
    } 

    public User findByEmail(String email){ 
     return userRepository.findByEmail(email); 
    } 

    public User findByLogin(String login){ 
     return userRepository.findByLogin(login); 
    } 

    @Override 
    public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException { 
     User user = userRepository.findByLogin(login); 
     if(user == null){ 
      throw new UsernameNotFoundException("Invalid username or password."); 
     } 

     List<GrantedAuthority> authorities = new ArrayList<>(); 
     authorities.add(new SimpleGrantedAuthority(user.getRole())); 

     return new org.springframework.security.core.userdetails.User(
       user.getLogin(), user.getPassword(), authorities); 
    } 

} 

答えて

0

中にresponible:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http 
     .csrf().disable() 
     .authorizeRequests() 
     .antMatchers(
       "/registration", 
       "/js/**", 
       "/css/**", 
       "/img/**", 
       "/webjars/**").permitAll() 
     .anyRequest().authenticated() 
     .and() 
     .formLogin() 
     .loginPage("/login") 
     .failureUrl("/login?error") 
     .defaultSuccessUrl("/") 
     .permitAll() 
     .and() 
     .logout() 
     .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login"); 
} 

私も用permitAll()を呼び出すと思いますformLoginはこれがデフォルトであるため冗長ですが、これは問題ではありません。

関連する問題