Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

loginForm não funciona

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";
    }

}
2 respostas
solução!

Fala Fred, tudo bem ?

Cara, clonei seu projeto e vi aqui qual o problema. E ele é causado por aspas no form da loginForm.

<input name=password" type="password" ... />

screenshot

Eu também não consegui ver no código o problema =D. Só consegui pegar as aspas sobrando analisando o request.

Colocando as aspas ali já resolveu. Abraço!

Nossa!!!!! E o olha que olhei o request e mesmo assim não tinha percebido. Funcionou, vlw