Pergunta

Eu estou usando formulário de autenticação baseada (JBOSS / JAAS), mas a minha forma está enviando os dados para o meu Servlet para que eu possa realizar alguns testes antes de tentar login.

Agora eu preciso de transmitir a j_security_check mas o que eu tentei não funcionou (404 erro) ...

Como posso redirecionar / para a frente para o j_security_check (por favor, note que o aplicativo está sendo executado através de HTTPS / SSSL)?

Eu posso fazê-lo funcionar com um redirecionamento e os parâmetros ir na URL, mas isso não é seguro (como o usuário / pass estadias no histórico do navegador, etc) ...

Todas as idéias?

Foi útil?

Solução

Eu vejo este é um post antigo, mas eu queria compartilhar uma resposta.

Se o pedido original é POST, você pode simplesmente encaminhar para j_security_check depois de fazer algum processamento.

...
request.getParameterMap().put( "j_username", new String[]{ userId } );
request.getParameterMap().put( "j_password", new String[]{ password } );

try 
{
    request.getRequestDispatcher("/j_security_check").forward( request , response );
    return null;
} 
catch (ServletException e) 
{
    logger.error( e );
} 
catch (IOException e)
{
    logger.error( e );
}

Outras dicas

Tomcat só aceita pedidos para j_security_check se iniciou um processo de login antes para essa sessão. Então, primeiro você precisa para tentar acessar um recurso de segurança de restrição. Então Tomcat está redireccionado para o formulário de login. Só então você está permitido o acesso j_security_check.

Eu sei que esta é uma questão muito velho, mas eu tive o mesmo problema e a única maneira que eu encontrei para resolvê-lo estava usando algo parecido com isto:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String user = req.getParameter("j_username");
    String pass = req.getParameter("j_password");

    resp.sendRedirect("/Project-web/j_security_check?j_username=" + user    + "&j_password=" + pass);

}

Desde que eu só tinha o mesmo problema, e as outras respostas não provaram trabalho para mim, eu queria compartilhar a minha própria solução:

1) Criar um novo JSP, digamos, loginForward.jsp, para fins de encaminhamento apenas:

<%@ page language="java" %>
<%
    final String username = request.getParameter("j_username");
    final String password = request.getParameter("j_password");
%>
<body onload="document.getElementById('creds').submit()">
    <form name="creds" id='creds' method="POST" action="j_security_check">
        <input type="hidden" name="j_username" value="<%= username %>">
        <input type="hidden" name="j_password" value="<%= password %>">
    </form>
</body>

2) No seu servlet, para a frente para que JSP:

final String redirectURL = String.format("loginForward.jsp j_username=%s&j_password=%s", username, password);
RequestDispatcher requestDispatcher = request.getRequestDispatcher(redirectURL);
requestDispatcher.forward(request, response);
return;    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top