2010-12-09 5 views
-1

zurückbringen Ich baue einen benutzerdefinierten AuthenticationSuccessHandler, so dass Benutzer mit Ajax anmelden können sowie eine normale Anmeldung (für Benutzer mit Javascript deaktiviert). Um zu überprüfen, ob es sich um einen Ajax-Anruf oder einen normalen Anruf handelt, habe ich einen zusätzlichen Anfrage-Header gesendet. Wenn es sich um einen Ajax-Anruf handelt, möchte ich einen anderen Code als bei normaler Anfrage zurückgeben. Dieses Ergebnis muss von einer jsp-Datei stammen. Ich könnte die URL zurücksenden, aber dann muss der Benutzer eine weitere Anfrage machen, um die Daten zu erhalten. Wie kann ich die Ausgabe der JSP-Datei aus meinem Code lesen oder ist das ein schlechtes Design?Wie man verschiedene Antworten mit einem normalen und AJAX-Login im Frühjahr Security 3

So behandle ich die Anfrage.

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, 
    HttpServletResponse response, Authentication auth) throws IOException, 
    ServletException{ 
    if ("true".equals(request.getHeader("X-Ajax-call"))) { 
     response.getWriter().print("Output of jsp file should go here?"); 

     response.getWriter().flush(); 
    } else { 
     defaultHandler.onAuthenticationSuccess(request, response, auth); 
    } 
} 
+1

servletRequest.getHeader (X_REQUESTED_WITH) = null || servletRequest.getParameter (X_REQUESTED_WITH)! = null; überprüft, ob die Anfrage Ajax oder nicht ist, keine Notwendigkeit, zusätzliche Header zu senden –

Antwort

3

Können Sie nicht einfach die Anfrage weiterleiten:

request.getRequestDispatcher("myFile.jsp").forward(request, repsponse); 
+0

Große Antwort, danke. –