Java 向Jersey/JAX-RS(Scala)中的所有响应添加cookie

Java 向Jersey/JAX-RS(Scala)中的所有响应添加cookie,java,scala,cookies,jersey,jax-rs,Java,Scala,Cookies,Jersey,Jax Rs,本以为这会是一个常见的用例,但我没能做到。另外,我正在使用Scala,但是Java的答案也可以 在Jersey,我想对我应用程序中的所有响应设置一个简单的cookie 快速谷歌显示,我可以通过执行以下操作在单个响应上设置cookie: returnresponse.ok(新的可查看(“/index”,model)) .cookie(新的NewCookie(“name”,“你好,世界!”) .build() 如果我只想在每个响应的基础上设置cookie,那就太好了,但我希望在每个响应上都设置coo

本以为这会是一个常见的用例,但我没能做到。另外,我正在使用Scala,但是Java的答案也可以

在Jersey,我想对我应用程序中的所有响应设置一个简单的cookie

快速谷歌显示,我可以通过执行以下操作在单个响应上设置cookie:

returnresponse.ok(新的可查看(“/index”,model))
.cookie(新的NewCookie(“name”,“你好,世界!”)
.build()

如果我只想在每个响应的基础上设置cookie,那就太好了,但我希望在每个响应上都设置cookie。这似乎是中间件的工作。设置中间件的方法:

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(…)
但这并没有进入浏览器

似乎如果我可以获得对
ServletResponse
HttpServletResponse
的引用,这将是可能的,但这在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);
    }

}

您是否已验证正在调用筛选器?重复?