Comment parvenir à j_security_check?
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?
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;