2016-11-29 2 views
1

Ich benutze Grizzly 2.3.24 als Standalone-Webserver für meine Anwendung. Da Grizzly-1798 geschlossen wurde, möchte ich meinen eigenen SessionManager implementieren. Aber anscheinend fehlt mir die Konfigurationsoption, um den standardmäßigen Session-Cookie-Namen festzulegen.Configure Sitzung Cookie-Name in Grizzly

Was funktioniert, ist die Einstellung der gewünschte Cookie-Name, kurz bevor ich die Sitzung erhalte, aber das scheint irgendwie verrückt, nein?

Hier ein Beispiel für die Sitzung in einer Jersey-Ressource zuzugreifen:

@GET 
public Response testGetSession(@Context Request request) { 
    request.setSessionCookieName("mySessionCookie"); 

    Session session = request.getSession(); 
    log.info("Got session id {}", session.getIdInternal()); 

    return Response.ok().entity("hallo").build(); 
} 

Wenn ich es nicht angeben, mit request.setSessionCookieName(), wird standardmäßig JSESSIONID.

Ich verstehe, es wäre möglich, dies in einem RequestFilter für alle Anfragen zu tun, aber muss ich wirklich diesen Pfad gehen?

Meine Erwartung war, dass die SessionManager für die Definition des Cookie-Namens verantwortlich sein würde.

Antwort

0

Nach ein paar Recherchen glaube ich, dass dies ein Fehler ist. Ich habe GRIZZLY-1877 eingereicht.


Update:

GRIZZLY-1877 wurde aufgelöst und die Version 2.3.30 zum Download und in Maven zentral zur Verfügung steht.

Als Ergebnis ist die Problemumgehung nicht mehr erforderlich. Die einfache Implementierung von SessionManager#getSessionCookieName() behebt die Situation.


Alte Abhilfe:

In der Zwischenzeit (oder wenn v2.3.30 keine Option ist), habe ich eine Abhilfe, ContainerRequestFilter die Verwendung Jersey den Session-Cookie-Namen für jeden Request einzustellen:

import org.glassfish.grizzly.http.server.Request; 

/** 
* Until the session cookie can be defined in the Grizzly {@link HttpServer}, 
* it will be set here. 
* <p> 
* The filter's priority ensures it gets executed before filters with 
* {@link Priorities#AUTHENTICATION}. 
* 
* @author hank 
*/ 
@Provider 
@Priority(300) // less than 1000 
@PreMatching 
public class SessionCookieFilter implements ContainerRequestFilter { 

    @Inject 
    javax.inject.Provider<Request> requestProvider; 

    @Inject 
    Config config; 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     Request request = requestProvider.get(); 
     request.setSessionCookieName(config.getSessionCookieName()); 
    } 

}