2016-11-29 65 views
1

我将Grizzly 2.3.24用作我的应用程序的独立Web服务器。由于Grizzly-1798已经关闭,我想实现我自己的SessionManager。但看起来,我缺少配置选项来设置默认的会话cookie名称。在灰熊中配置会话cookie名称

在我获得会话之前设置所需的cookie名称有效,但这看起来有点疯狂,不是吗?

下面的例子访问在新泽西州的资源会话:

@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(); 
} 

如果我不request.setSessionCookieName()指定,则默认为JSESSIONID

据我所知,对所有请求都可以在RequestFilter中做到这一点,但我是否真的需要走这条路?

我的期望是SessionManager将负责定义cookie名称。

回答

0

经过一番研究,我相信这是一个错误。我已经提交GRIZZLY-1877


更新:

GRIZZLY-1877已经解决和版本2.3.30可供下载和Maven的中央。

因此,以下解决方法不再需要。简单地实施SessionManager#getSessionCookieName()修复了这种情况。


旧的解决方法:

在此期间(或者如果v2.3.30是不是一种选择),我有一种变通方法,使用新泽西州的ContainerRequestFilter为每个Request设置会话cookie名称:

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

}