A aplicação pelo login padrão do Spring funciona sem problemas, porém pelo login persoonalizado não, clico em logar a unica coisa que acontece é mudar a url para login?error. coloque no meu jsp esse codigo:
${SPRING_SECURITY_LAST_EXCEPTION.message} e ele retorna: Bad credentials. Mas a senha não está errada, pois se desativo o codigo: .loginPage("/login").permitAll() e volta para a tela de login padrão funciona sem problemas. Refiz todas as aulas e não consegui descobrir o que acontece. Segue alguns fontes e tbem já disponibilizei no github: https://github.com/frcunha/casadocodigo
package br.com.casadocodigo.loja.conf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import br.com.casadocodigo.loja.repository.UsuarioRepository;
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UsuarioRepository usuarioRepository;
@Override
protected void configure(HttpSecurity http) throws Exception {
//orders das regras faz diferença => ideal fazer bloqueios primeiro depois liberações
http.authorizeRequests()
.antMatchers("/produtos/form").hasRole("ADMIN") //no banco de dados sempre tem que constar ROLE_
.antMatchers("/carrinho/**").permitAll()
.antMatchers(HttpMethod.POST, "/produtos").hasRole("ADMIN")
.antMatchers(HttpMethod.GET, "/produtos").permitAll()
.antMatchers("/produtos/**").permitAll() //libera tudo que não foi bloqueado antes no cas /produtos/form ficará bloqueado
.antMatchers("/resources/**").permitAll() //css, imagens, js....
.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(usuarioRepository)
.passwordEncoder(new BCryptPasswordEncoder());
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Casa do Código</title>
<c:url value="/resources/bootstrap/css" var="cssBootStrapPath"/>
<link rel="stylesheet" href="${cssBootStrapPath }/bootstrap.min.css"/>
<link rel="stylesheet" href="${cssBootStrapPath }/bootstrap-theme.min.css"/>
</head>
<body>
<div class="container" >
<h1>Login da Casa do Código</h1>
<form:form servletRelativeAction="/login" method="POST">
<a>${SPRING_SECURITY_LAST_EXCEPTION.message}</a>
<div class="form-group">
<label>Login</label>
<input name="username" type="text" class="form-control"/>
</div>
<div class="form-group">
<label>Senha</label>
<input name=password" type="password" class="form-control"/>
</div>
<button type="submit" class="btn btn-default">Logar</button>
</form:form>
</div>
</body>
</html>
package br.com.casadocodigo.loja.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class LoginController {
private static final Logger logger = Logger.getLogger(LoginController.class);
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginForm() {
return "loginForm";
}
}