2016-11-29 82 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()); 
    } 

}