6
respostas

Não faz login

Meu sistema de Login não esta esta funcionando corretamente. Infelizmente nenhuma exceção e lançada.

servlet:

<bean id="userDetailsService" class="br.com.esportsclub.security.ESCUserDetailsService"></bean>

    <sec:http pattern="/resources/**" security="none"></sec:http>
    <sec:http pattern="/login" security="none"></sec:http>
    <sec:http pattern="/" security="none"></sec:http>
    <sec:http pattern="/usuario/cadastro" security="none"></sec:http>
    <sec:http use-expressions="true" auto-config="true">

        <sec:intercept-url pattern="/**/adicionar" access="hasRole('ROLE_ADMIN')"/>
        <sec:intercept-url pattern="/**" access="isAuthenticated()"/>

        <sec:form-login login-page="/login"
            default-target-url="/bemvindo" authentication-failure-url="/login"
            username-parameter="username" password-parameter="password" />
        <sec:logout logout-success-url="/login"
            invalidate-session="true" />
        <sec:csrf disabled="true" />
    </sec:http>

    <sec:authentication-manager>
        <sec:authentication-provider
            user-service-ref="userDetailsService">
            <sec:password-encoder hash="bcrypt"></sec:password-encoder>
        </sec:authentication-provider>
    </sec:authentication-manager>
</beans>

homeController:

@Controller
@RequestMapping("/")
public class HomeController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(){
        return "home.home.tiles";
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login() {
        return "home.login.tiles";
    }

    @RequestMapping(value = "/bemvindo", method = RequestMethod.GET)
    public String bemvindo(){
        return "home.bemvindo.tiles";
    }

}

login.jsp:

<form action="<c:url value='/j_spring_security_check' />" method="post">
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label>Nome de usuário:</label> <input type="text" name="username"
                    class="form-control">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label>Senha:</label> <input type="password" name="password"
                    class="form-control">
            </div>
        </div>
    </div>
    <input type="submit" value="Fazer login" class="btn btn-default" />
</form>

Projeto no GitHub: https://github.com/rafaelvicio/ESC

6 respostas

Oi Rafael, a configuração que vc fez está um pouco diferente da do curso, já que usamos a programática.. Mas como vc disse que o projeto está funcionando e tudo mais, vou dar meu chute. O login está chegando lá na sua implementação do UserDetailsService? Se tiver chegando, acho que o problema pode estar na sua query... Verifica se lá não está dando uma exception.

Bom, fui ver seu código e está usando a JPARepository... Uma outra coisa que não vi é a parte que vc implementa UserDetails, onde está? Sua classe usuário não implementa.

Eu ja finalizei com sucesso os cursos aqui do Alura de SpringMVC, mas infelizmente foi procurar evoluir o projeto e não consegui porque nem sempre acho tutorial para a configuração programatica, por esse motivo estou fazendo com XML.

Sobre a UserDetails,

public class ESCUserDetailsService implements UserDetailsService{

    @Autowired
    private RepositorioUsuario repositorio;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Usuario usuario = repositorio.findByUsername(username);
        if (usuario == null){
            throw new UsernameNotFoundException("Usuario não encontrado");
        }

        Set<GrantedAuthority> perfis = new HashSet<GrantedAuthority>();
        perfis.add(new SimpleGrantedAuthority(usuario.getRole()));

        return new User(usuario.getUsername(), usuario.getPassword(), perfis);
    }

}
<bean id="userDetailsService" class="br.com.esportsclub.security.ESCUserDetailsService"></bean>
public interface RepositorioUsuario extends JpaRepository<Usuario, Long>{

    Usuario findByUsername(String username);

}

Entendi o código agora.. você usou a classe User do próprio SpringSecurity, é uma possibilidade sim. Quando vc tenta navegar, sempre volta para a tela de login? dá erro? Você tem que ir tentando debugar passo por passo... para tentar isolar o erro.. Como é uma aplicação sua, não vai dar para baixar e rodar local aqui..

Sim, ele retorna pro login como definido em casso de failured, mas ele não retorna nenhum erro no console.

authentication-failure-url="/login"

Nao sou muito bom o debug mode, estou me virando aqui. Eu coloquei o código do GitHub ai com o projeto caso queira rodar ai.

Up