Domanda

Sto usando l'autenticazione basata su form (JBOSS / JAAS), ma la mia forma sta inviando i dati al mio Servlet in modo da poter effettuare alcuni controlli prima di tentare di effettuare il login.

Ora ho bisogno di trasmettere al j_security_check, ma quello che ho provato non ha funzionato (errore 404) ...

Come faccio a reindirizzare / invia il j_security_check (si prega di notare l'applicazione è in esecuzione su HTTPS / SSSL)?

posso farlo funzionare con un redirect ei params andare nella URL, ma non è sicuro (come l'utente / passaggio rimane nella cronologia del browser, ecc) ...

Tutte le idee?

È stato utile?

Soluzione

vedo questo è un vecchio post, ma ho voluto condividere una risposta.

Se la richiesta originale è POST, si può semplicemente l'ora di j_security_check dopo aver fatto alcune elaborazioni.

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

Altri suggerimenti

Tomcat accetta solo richieste di j_security_check se ha avviato un processo di login prima per quella sessione. Quindi prima bisogna tentare di accedere a una risorsa security-constraint. Poi Tomcat vi reindirizzerà al form di login. Solo allora stai permesso di accedere j_security_check.

So che questa è una domanda troppo vecchio, ma ho avuto lo stesso problema e l'unico modo che ho trovato per risolverlo stava usando qualcosa di simile:

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

}

Da quando ho appena avuto lo stesso problema, e gli altri risposte non hanno dimostrato di lavorare per me, ho voluto condividere la mia soluzione:

1) Creare un nuovo JSP, diciamo, loginForward.jsp, ai fini della trasmissione solo:

<%@ 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) Nella tua servlet, avanti a quel 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;    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top