Paulo,
Estou com um projeto da faculdade e nele eu tenho diferentes perfis de usuário e cada um será redirecionado para sua própria página após a autenticação. Encontrei um post de um blog seu a solução abaixo, porém o redirecionamento não é feito, na verdade após o login ele não redireciona para nenhuma URL. O login é efetuado com sucesso, se eu faço um GET para a URL a requisição é feita perfeitamente.
Fiz alguns testes e vi que o método onAuthenticationSuccess
é invocado, porém ele não entra na estrutura condicional para verificar as roles e redirecionar para a página.
Segue o código.
SecurityConfiguration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
@Autowired
private UserRepository repository;
@Autowired
private LoginSuccessHandler loginSuccessHanlder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/teacher-panel").hasRole("TEACHER")
.antMatchers("/student-panel").hasRole("STUDENT")
.anyRequest().authenticated()
.and().formLogin().loginPage("/login")
.successHandler(loginSuccessHanlder).permitAll();
super.configure(http);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(repository).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/fonts/**");
}
}
LoginSuccessHandler
@Component
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
private RedirectStrategy redirect = new DefaultRedirectStrategy();
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth)
throws IOException, ServletException {
if (auth.getAuthorities().contains(new Role("ROLE_TEACHER"))) {
redirect.sendRedirect(request, response, "/teacher-panel");
} else if (auth.getAuthorities().contains(new Role("ROLE_STUDENT"))) {
redirect.sendRedirect(request, response, "/student-panel");
}
}
}