Question

J'utilise l'authentification par formulaire (JBOSS / JAA), mais ma forme envoie les données à mon Servlet je peux effectuer quelques vérifications avant d'essayer de se connecter.

Maintenant, je dois transmettre à j_security_check mais ce que j'essayé ne fonctionne pas (erreur 404) ...

Comment puis-je rediriger / avant la j_security_check (s'il vous plaît noter que l'application est en cours d'exécution sur https / SSSL)?

Je peux le faire fonctionner avec une redirection et les params aller dans l'URL, mais ce n'est pas sûr (que l'utilisateur / passe reste dans l'historique du navigateur, etc) ...

Toutes les idées?

Était-ce utile?

La solution

Je vois que c'est un ancien poste, mais je voulais partager une réponse.

Si la demande initiale est POST, vous pouvez simplement à l'avant j_security_check après que vous faites un peu de traitement.

...
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 );
}

Autres conseils

Tomcat accepte uniquement les demandes de j_security_check si elle a lancé un processus de connexion avant pour cette session. Donc, vous devez d'abord essayer d'accéder à une ressource contrainte de sécurité. Ensuite, Tomcat vous redirigera vers le formulaire de connexion. Ensuite seulement, vous a permis d'accéder à j_security_check.

Je sais que cela est une question trop vieux mais j'ai eu le même problème et la façon unique que j'ai trouvé pour le résoudre utilisait quelque chose comme ceci:

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);

}

Depuis que je viens d'avoir le même problème, et les réponses des autres ne posèrent pas travailler pour moi, je voulais partager ma propre solution:

1) Créer une nouvelle JSP, par exemple, loginForward.jsp, à des fins d'expédition seulement:

<%@ 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) Dans votre servlet, JSP à l'avant:

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;    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top