2016-06-22 4 views
0

nicht erhalten Ich implementiere die Autorisierung für JSP-Seite mit HttpHandler und HttpFilter und unserem firmeninternen Autorisierungsdienst. Die Logik lautet also: Wenn ich HttpRequest erhalte und ein Benutzer im Header ist, sende ich eine Anfrage an unseren Dienst, um Zugriffsrollen für diesen Benutzer zu erhalten. Dann möchte ich diese Rolle als Attribut HttpSession hinzufügen. Ich implementierte diese Logik in HttpHandler, die AbstractHandler von Jetty-Server erweitert. Daher wurden die Rollen erfolgreich zum Sitzungsobjekt hinzugefügt. Dann geht Request zu Filter. In meinem Filter versuche ich diese Werte aus der Sitzung zu bekommen, aber kein Glück. Ich überprüfte den String-Hash-Wert der Sitzung überall ist gleich, aber in Handler kann ich Wert als ein Attribut sehen, in Filter gibt es überhaupt kein Attribut. Dann habe ich überprüft, dass hashCode() in Handler und in Filter verschiedene Werte für Session-Objekte zurückgibt, selbst wenn sie denselben Hash-Sitzungswert haben.HttpSession Attribut

Können Sie etwas vorschlagen, um herauszufinden, warum Sitzungsidentifikator die gleichen, aber Objekte sind unterschiedlich und es gibt keinen Wert von Attribut in Filter. Diese

ist, wie ich Wert auf die Sitzung in Griffmethode Handler hinzufügen:

httpServletRequest.getSession(true).setAttribute(ACCESS_ROLES, StringUtils.join(getEntitlementAuthorities(user), ENTITLEMENT_ROLES_DIVIDER)); 

Dies ist, wie ich versuche, Daten in Filter zurück zu bekommen:

Object attributesObject = httpRequest.getSession().getAttribute(ACCESS_ROLES); 
+0

Haben Sie Ihre Jetty Sicherheit in [Konfigurieren der Sicherheit] wie beschrieben betrachtet Integration (http://www.eclipse.org/jetty/documentation/9.2.10.v20150310/ configuring-security-authentication.html)? –

Antwort

0

Schließlich Problem gefunden wurde . Ich erstellen Jetty-Server programmatisch, ich füge Handler in HandlerCollection. Zuerst habe ich SessionHandler hinzugefügt und dann ServletContextHandler hinzugefügt. ServletContextHandler erstellt seinen eigenen SessionHandler, wenn Sie ihn nicht festlegen. Also hatte ich zwei SessionHandler. Selbst wenn ich Session Identifier in der Liste sah, waren es verschiedene SessionObjects, die keine Attribute gemeinsam hatten. Schließlich wurde dieses Schema zu arbeiten:

HandlerCollection hc = new HandlerCollection(); 
ServletContextHandler contextHandler = buildServletHandler(); 
hc.addHandler(new UserAuthenticationHandler()); 
hc.addHandler(contextHandler); 
hc.addHandler(logHandler); 
SessionHandler sh = new SessionHandler(); 
sh.setHandler(hc); 
server.setHandler(sh); 
Verwandte Themen