2016-05-08 11 views
0

Ich habe diese Interceptor-Funktion, wo ich meine Sitzung konfigurieren.Wie ich meine konfigurierte Sitzung in AJAX arbeiten lassen kann

if (request.getRequestURL().indexOf("profile") > 0) { 
    if (session.getAttribute("access").equals("sub-admin")) { 
     System.out.println("This is request to profile - admin"); 
    } else { 
     System.out.println("This is request to profile - user"); 
     response.sendRedirect(request.getContextPath() + "/error"); //ERROR HERE YOU ARE JUST A USER NOT AN ADMIN, I WILL REDIRECT YOU TO ERROR PAGE 
    } 
} 

Jetzt verwende ich jQuery und AJAX in meinem Frontend.

Wenn ich nur ein Benutzer bin und ich auf localhost:8080/sample/profile zugreifen werde, wird es funktionieren. Es hat mich auf die Fehlerseite umgeleitet.

Aber wenn ich es in meinem Menü auf der Homepage zugreifen und Profil klicken, funktioniert es nicht.

Ich denke, es ist, weil ich AJAX verwende und der Pfad ändert sich nicht, nur die Ansicht.

$.ajax({ 
    url: ROOT_URL + '/sample/profile', 
    type: "get", 
    dataType: "text" 
}).done(function(data) { 
    $('#idcontainer').html(data); 
}); 

Wie lässt sich die Sitzung in meinem AJAX-Frontend arbeiten?

Antwort

0

Wenn Sie die Umleitung von einem AJAX-Aufruf zu handhaben möchten, können Sie einen Blick auf die folgende Frage nehmen:

Eine bessere Lösung wäre, wenn die prüfen sein, Anfrage ist AJAX, und eine JSON-Antwort mit einem HTTP-Status senden, die Sie auf dem Frontend bearbeiten können:

JSON Antwort:

Und in Ihrem Interceptor:

boolean ajax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); 
if (ajax) { 
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
    response.getWriter().write(responseToClient); 
    response.getWriter().flush(); 
    response.getWriter().close(); 
} else { 
    response.sendRedirect(request.getContextPath() + "/error"); 
} 

Beachten Sie, dass nicht alle AJAX-Bibliotheken umfassen die X-Requested-With Header, aber jQuery zusammen mit den meisten anderen modernen Bibliotheken tun.

Dann in Ihrer JavaScript-Funktion:

$.ajax({ 
    url: ROOT_URL + '/sample/profile', 
    type: "get", 
    dataType: "text" 
}).done(function(data) { 
    // handle success HTML 
}).fail(function (data) { 
    // parse JSON and alert error message 
}); 

Darüber hinaus scheint es, dass Sie den AJAX-Request verwenden, den Inhalt der Seite zu ersetzen, mit dem HTML-Code aus der AJAX-Anforderung zurückgegeben. Statt eine JSON-Antwort verwenden, können Sie auch zurückkehren nur den Fehler HTML statt, und dass in der gleichen Art und Weise angezeigt werden, die Sie das Profil von HTML-Inhalten zurückkehren:

HTML-Antwort:

<h1>Error</h1> 

<p class="error">You must be logged in to view this content.</p> 

Und stellen Sie den HTML wie in Ihrem done Rückruf:

.fail(function (data) { 
    $('#idcontainer').html(data); 
}); 
+0

Das ist nur ein Fehler, ich habe es gerade bearbeitet. Haben Sie weitere Beispiele zur Handhabung der Weiterleitung? – guwop69

+0

@ guwop69 Ich habe die Antwort entsprechend bearbeitet. – Casey

Verwandte Themen