Pregunta

Estoy usando autenticación basada en formularios (JBOSS/JAAS) pero mi formulario envía los datos a mi Servlet para poder realizar algunas comprobaciones antes de intentar iniciar sesión.

Ahora necesito reenviar a j_security_check pero lo que intenté no funcionó (error 404)...

¿Cómo puedo redirigir/reenviar a j_security_check (tenga en cuenta que la aplicación se ejecuta a través de https/sssl)?

Puedo hacer que funcione con una redirección y los parámetros van en la URL, pero eso no es seguro (ya que el usuario/contraseña permanece en el historial del navegador, etc.)...

¿Algunas ideas?

¿Fue útil?

Solución

Veo esto es una entrada antigua, pero quería compartir una respuesta.

Si la solicitud original es POST, puede simplemente enviar a j_security_check después de hacer algún tipo de procesamiento.

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

Otros consejos

Tomcat sólo acepta solicitudes de j_security_check si se inicia un proceso de inicio de sesión antes de esa sesión. Así que primero que hay que tratar de acceder a un recurso de seguridad en restricciones. A continuación, Tomcat se redirigirá al formulario de acceso. Sólo entonces se le permite acceder a la j_security_check.

Sé que esto es una pregunta demasiado viejo pero tenía el mismo problema y la única manera que he encontrado para resolverlo estaba usando algo como esto:

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

}

Como acabo de tener el mismo problema y las otras respuestas no han funcionado para mí, quería compartir mi propia solución:

1) Cree un nuevo JSP, por ejemplo, loginForward.jsp, sólo para fines de reenvío:

<%@ 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) En su servlet, reenvíe a ese 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top