2009-04-09 5 views
1

J'utilise l'authentification basée sur le formulaire (JBOSS/JAAS) mais mon formulaire envoie les données à ma servlet afin que je puisse effectuer quelques vérifications avant d'essayer de me connecter.Comment faire pour transférer vers j_security_check?

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 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?

Répondre

2

Je vois que c'est un ancien article, mais je voulais partager une réponse. Si la requête d'origine est POST, vous pouvez simplement transmettre à j_security_check après avoir effectué un 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); 
} 
3

Tomcat accepte uniquement les demandes au j_security_check s'il a initié un processus de connexion avant pour cette session. Vous devez d'abord essayer d'accéder à une ressource de sécurité. Ensuite, Tomcat vous redirigera vers le formulaire de connexion. Alors seulement êtes-vous autorisé à accéder à j_security_check.

+0

ce n'est pas mon problème. Il redirige vers mon formulaire de connexion. L'action de formulaire va à ma servlet et maintenant je veux rediriger/transmettre à la j_security_check. La redirection fonctionne mais c'est une requête GET qui n'est pas sûre – AlfaTeK

0

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

} 
0

Depuis que je viens d'avoir le même problème, et les autres réponses 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;  
Questions connexes