Olá a todos.
Na aula 4 do curso Spring MVC 2, eu implementei o logout do sistema via GET. Sempre que eu acesso a URL "http://localhost:8080/casadocodigo/logout", o logout acontece e sou redirecionado automaticamente para a tela de login "http://localhost:8080/casadocodigo/login". Até aqui OK, mas o problema é que nesse momento se eu realizo o login, sou autenticado, mas não sou redirecionado para a página home, mas sim para login novamente. O interessante é que na URL de login está adicionado um "?logout" no final e se eu tento logar novamente eu sou levado para a home. Quando sou redirecionado para a página de login eu sei que estou autenticado porque eu consigo acessar as URLs que eu não teria permissão.
Por que esse redirecionamento incorreto ocorre?
Abaixo está o código da minha classe SecurityConfiguration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
@Autowired
private UsuarioDAO usuarioDao;
@Override
protected void configure(HttpSecurity http) throws Exception {
/**
* Método para criar as regras de permissão ao sistema.
*
* Sequência das permissões: primeiro bloqueia e depois vai liberando o que é necessário.
*/
http.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.antMatchers("/carrinho/**").permitAll()
.antMatchers("/pagamento/**").permitAll()
.antMatchers("/produtos/form").hasRole("ADMIN")
.antMatchers(HttpMethod.POST,"/produtos").hasRole("ADMIN")
.antMatchers(HttpMethod.GET,"/produtos").hasRole("ADMIN")
.antMatchers("/produtos/**").permitAll()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(usuarioDao)
.passwordEncoder(new BCryptPasswordEncoder());
}
}
Abaixo está a JSP da página de login
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Casa do Código</title>
<c:url value="/resources/css" var="cssPath" />
<link rel="stylesheet" href="${cssPath}/bootstrap.min.css" />
<link rel="stylesheet" href="${cssPath}/bootstrap-theme.min.css" />
<style type="text/css">
body{
padding: 60px 0px;
}
</style>
</head>
<body>
<div class="container">
<h1>Login Casa do Código</h1>
<form:form servletRelativeAction="/login" method="post">
<div class="form-group">
<label>Nome</label>
<input type="text" name="username" class="form-control" />
</div>
<div class="form-group">
<label>Senha</label>
<input type="password" name="password" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">Logar</button>
</form:form>
</div>
</body>
</html>
Se quiserem analisar mais alguma coisa, eu subi o meu projeto no GitLab. Segue link do projeto: https://gitlab.com/MauryOshiro/projeto-curso-spring-mvc-2-alura---casa-do-codigo.git