簡體   English   中英

將Cookie添加到Jersey / JAX-RS(Scala)中的所有響應中

[英]Adding cookie to all responses in Jersey / JAX-RS (Scala)

以為這將是一個常見的用例,但我要簡短了。 另外,我正在使用Scala,但Java回答也可以。

在澤西島,我想對我的應用程序發出的所有響應設置一個簡單的Cookie。

快速谷歌顯示我可以通過執行以下操作在單個響應上設置cookie:

return Response.ok(new Viewable("/index", model)) .cookie(new NewCookie("name", "Hello, world!")) .build();

如果我只想按每個響應設置一個cookie,那很好,但是我希望每個響應都設置它。 這似乎是中間件的工作。 Jersey Docs建議使用此方法來設置中間件:

class MyResponseMiddleware ContainerResponseFilter {
  override def filter(req: ContainerRequestContext, res: ContainerResponseContext) = {
    // do stuff here
  }  
}

問題是沒有辦法在ContainerResponseContext上設置cookie,因為.getCookies返回只讀映射,這與可變的.getHeaders()不同。

我還嘗試通過設置標題來創建cookie:

containerResponseContext.getHeaders().add(HttpHeaders.SET_COOKIE, new NewCookie(...))但這並沒有出現在瀏覽器中。

似乎如果我能獲得對ServletResponseHttpServletResponse的引用,這將很簡單,但在Jersey的中間件(過濾器)中似乎不可能實現。

這似乎是一個非常簡單的用例,所以我覺得我缺少明顯的東西。

您可以簡單地將HttpServletResponse注入到過濾器中。 使用@Context注釋,如下所示。

@Provider
public class ResponseHTTPStatusFilter implements ContainerResponseFilter{
@Context HttpServletResponse resp;
    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
       resp.addCookie(cookie);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM