1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Dificuldade no Spring Security

Ola, estou tendo problemas com o Spring Security no momento de fazer login na pagina, o filtro esta funcionando e caso o usuario não esteja logado ele é redirecionado para a pagina de login, porem quando digito o login corretamente o usuario é redirecionado para pagina de login novamente, as configurações que usei são as que estão no livro "Spring MVC" da casa do codigo apenas com a diferença que estou usando JDBC ao invez do hibernate.Seguem as configurações:

Formulado de login:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ 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="spring" %>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>
<!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=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/login.css"/>">
<title>Login</title>
</head>
<body>
<style type="text/css">
    button {   
        background: url("<c:url value="/resources/img/submit_bg.gif" />") repeat-x scroll 0 0 transparent; 
        border: 1px solid #B7D6DF; 
        border-radius: 2px 2px 2px 2px; 
        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); 
        color: #437182; 
        cursor: pointer; 
        font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; 
        font-size: 14px;
        font-weight: bold; 
        height: auto; 
        padding: 6px 10px; 
        text-shadow: 0 1px 0 #FFFFFF; 
        width: auto; 
    }
</style>


<div id="signup-form-login">        
        <!--BEGIN #subscribe-inner -->
        <div id="signup-inner">        
            <div class="clearfix" id="header">            
                <img id="signup-icon" src="<c:url value="/resources/img/cadeado.png" />" alt="" />        
                <h1>Login<br/></h1>            
            </div>    

               <!--  <form method="POST" action="<c:url value="/logar" />">  -->
               <c:url var="logar" value="/logar"/>
                     <form:form action="${logar}" method="POST" commandName="usuario"> 
                         <p>
                        <label for="nome">Usuário*</label>
                        <input id="nome" type="text" name="nome" value="" />
                        <form:errors path="nome" />
                    </p>                
                    <p>
                        <label for="senha">Senha*</label>
                        <input id="senha" type="password" name="senha" value="" />
                        <form:errors path="senha" />
                    </p>                
                    <table border="0" >
                        <tr>
                            <td>
                                <p>
                                    <button id="submit" type="submit">Entrar</button>
                                </p>
                            </td>  
                        </tr> 
                   </table>   

                  <security:csrfInput/>          
                </form:form>

            <div id="required">
                <p>*Campos obrigatórios <br/></p>
            </div>
      </div>
</div>   
</body>
<html>

Classe SecurityConfig: Como no meu formulario os campos de login e senha chamam "nome" e "senha" eu alterei as configurações abaixo para .usernameParameter("nome").passwordParameter("senha")

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Override  
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/listarInformativos").hasRole("USER")
        .antMatchers("/listarInformativos").hasRole("ADMIN")
        .antMatchers("/resources/css/login.css").permitAll()
        .antMatchers("/resources/img/cadeado.png").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().loginPage("/login").usernameParameter("nome").passwordParameter("senha").permitAll();    
    }

    @Override    
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
        .usersByUsernameQuery("SELECT id, nome, senha FROM tbl_usuario WHERE nome = ?;")
        .authoritiesByUsernameQuery("SELECT tbl_usuario.nome, tbl_regras.regra FROM tbl_usuario INNER JOIN tbl_regras ON tbl_usuario.id_user = tbl_regras.id_user"
                + "WHERE tbl_usuario.nome = ?;");

    }

}

Classe de Controller do login

@Controller
public class LoginController {

    @RequestMapping("/login")
    public String loginForm() {
        return "login";
    }

    @RequestMapping(value="/logar", method=RequestMethod.POST)
    public String efetuaLogin(@Valid Usuario usuario, HttpSession session, BindingResult br) {            
            return "redirect:listarInformativos";    
    }

    @RequestMapping(value="/logout")
    public String deslogar(HttpSession session){        
        session.invalidate();
        return "redirect:login";
    }

}

Alguem sabe me dizer onde estou errando?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring java spring-security ou faça a sua própria pergunta.