4
respostas

Formulario de login

Boa noite,

Spring tem a opção de termos uma pagina própria de login, quando é requerida uma requisição que precisa de autenticação ele vai para pagina.

Mas eu não tenho uma pagina de login, eu tenho uma div e meu formulário fica nessa div que eu aciono com eventos jquery.

Minha dúvida é, teria de alguma forma ao invés do Spring mandar para uma página customizada, eu conseguisse fazer o mesmo dos eventos jquery.

Porque do jeito que estou fazendo, está com cara de gambiarra, queria saber se alguma outra forma.

obrigado.

4 respostas

Olá Gabriel tudo bem?

Dentro da sua div tem um formulário ?

Se sim basta que a action desse formulário seja /login (por padrão), o method deve ser post e no formulário deve ter ser enviado os atributos no request com os nomes de username e password.

Caso você queira fazer via ajax o procedimento é o mesmo porém o Content-type deve ser application/x-www-form-urlencoded, mas o request deve ter os mesmos atributos e o method deve ser post.

Espero ter ajudado.

[]s

Ola Fernando tudo bem e vc?

Acho que eu não consegui explicar direito, meu form em todas as paginas no meu cabeçalho escondido, o redirect que o Spring da é uma pagina correto?

vou colocar meus códigos aqui.

form:

            <form action="/importHair/login" method="post">
                <div class="box-login">
                    <div class="box-title-login">
                        <p class="title-login">login</p>
                    </div>

                    <div class="box-label-login">
                        <label class="label-input-login" for="UsuarioEmailLogin">Email</label>
                        <input class="input-inform" id="UsuarioEmailLogin" name="username" type="email" required="nao funciona"/>
                    </div>

                    <div class="box-label-login">
                        <label class="label-input-login" for="UsuarioSenhaLogin">Senha</label>
                        <input class="input-inform" id="UsuarioSenhaLogin" name="password" type="password" required="nao funciona"/>
                    </div>

                    <a href="#" class="RecoverPassword">Esqueceu sua senha?</a>
                    <input type="hidden" name="${_csrf.parameterName }"    value="${_csrf.token }"/>
                    <button type="submit" class="btn-login">Entrar</button>

                    <a href="#" class="customer-register-link">Criar conta</a>
                </div>
            </form>

Código ajax:

$(".btn-login").click(function() {

    var username = $("#UsuarioEmailLogin").val();
    var password = $("#UsuarioSenhaLogin").val();

    $.ajax({
        type : "POST",
        url : "/importHair/login",
        data : {
            "username" : username,
            "password" : password,
        },
        beforeSend : function(xhr) {
            xhr.setRequestHeader("login-ajax", "true");
            xhr.setRequestHeader(header, token);
        },
        success : function(resultado) {
            if (resultado == "confirmacao") {
                $(location).attr('href', "/importHair/confirmacao");
            }

            if (resultado == "conta") {
                $(".box-login").addClass("remove-login");
                $(".box-cadastro").addClass("remove-login");
                $(".box-background").css("display", "none");
                $(location).attr('href', "/importHair/minhaConta");

            }

        },

        error : function(data, xhr) {
            console.log("login incorreto");
            $(".erro-login").removeClass("remove-login");
            $(".erro-login").removeClass("show-login");
            $(".erro-login").addClass("show-login");

            setTimeout(function() {
                $(".erro-login").addClass("remove-login");
            }, 1500)
        }
    })
});

confesso que não entendi a parte do application/x-www-form-urlencoded, esse meu código ajax é acionado quando clico o botão, e dependendo da resposta do servidor eu redireciono, mas isso é uma gambiarra.

minha configuração:

.anyRequest().authenticated().
        and().formLogin().loginPage("/loginCustom").successHandler(customAuthenticationSuccessHandler)
        .failureHandler(customAuthenticationFailureHandler);

e meu controller:

    @RequestMapping(value ="/loginCustom", method = RequestMethod.GET)
    public String login(){

        return "/login";
    }
}

desculpe pelo post longo, mas acho q eu ou nao entendi sua resposta, ou nao me fiz claro na primeira explicação.

obrigado pela atenção.

Olá Gabriel,

Acho que o que eu falei está relacionado

O que você quer fazer via jquery quando o spring te retornar se o login deu certo ou não ?

Olá Fernando,

eu já vazia via jQuery ajax o login, mas o que eu queria e que quando o usuário tentar alguma pagina bloqueado, ao inves do Spring me manda uma pagina, ele fazer a minha div surgir na tela. e não ser redirecionado para uma pagina de login.