Frage

Ich bin mit formularbasierte Authentifizierung (JBOSS / JAAS), aber meine Form, die Daten zu meinem Servlet sendet, so kann ich einige Prüfungen durchführen, bevor einzuloggen versuchen.

Jetzt muss ich j_security_check nach vorn, aber was habe ich versucht hat nicht funktioniert (404 Fehler) ...

Wie kann ich umleiten / an der j_security_check (bitte beachten Sie die Anwendung läuft über https / SSSL)?

Ich kann es mit einer Umleitung funktioniert und die params in der URL gehen, aber das ist nicht sicher (wie der Benutzer / Pass im Browserverlauf bleibt, etc) ...

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich sehe dies ist eine alte Post, aber ich wollte eine Antwort teilen.

Wenn die ursprüngliche Anforderung POST, können Sie einfach vorwärts j_security_check, nachdem Sie einige Berechnungen durchführen.

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

Andere Tipps

Tomcat akzeptiert nur Anfragen an j_security_check wenn es einen Login-Prozess eingeleitet, bevor für diese Sitzung. So müssen Sie zuerst versuchen, eine Sicherheits-Constraint-Ressource zuzugreifen. Dann Tomcat werden Sie zum Login-Formular umleiten. Erst dann dürfen Sie j_security_check zugreifen zu können.

Ich weiß, dass dies eine zu alten Frage, aber ich hatte das gleiche Problem und die einzigartige Art und Weise, dass ich es wurde mit so etwas lösen gefunden:

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 ich gerade das gleiche Problem hatte, und die anderen Antworten haben bewiesen, nicht für mich zu arbeiten, wollte ich meine eigene Lösung teilen:

Erstellen

1) eine neue JSP, sagen wir, loginForward.jsp, für die Weiterleitung dient nur:

<%@ 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) In Ihrem Servlet, vorwärts zu dieser 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;    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top