【问题标题】:Can not access cookies in spring jersey based application无法在基于 Spring jersey 的应用程序中访问 c​​ookie
【发布时间】:2025-12-10 22:15:01
【问题描述】:

我正在开发 spring 安全实现模块,我需要设置和获取一些 cookie。我尝试使用 (javax.servlet.http.Cookie) 和 (javax.ws.rs.core.NewCookie) 创建 cookie,它们都可以正常设置 cookie,我可以在浏览器中看到 cookie,但是当我尝试访问它们时,它确实只给了我 JSESSIONID,我还需要访问其他 cookie。

这就是我设置 cookie 的方式,在这两种方式中我都会成功地将 cookie 保存在浏览器上:

Cookie cookieOne = new Cookie("SERVLETCOOKIE", "TESTING COOKIES");

NewCookie cookieTwo = new NewCookie("WSRSCOOKIE", "TESTING COOKIES");

当我尝试访问 cookie 时,我已经尝试了以下 @Autowired 和 @Context,但我只能获取 JSESSIONID cookie。

@Autowired HttpServletRequest request;
and 
@Context HttpServletRequest request;

我正在尝试访问 cookie,如下所示:

Cookie[] cookieList = request.getCookies();

        if(cookieList !=null && cookieList.length >0){
            for(int i=0;i<cookieList.length;i++){
                Cookie cookie = cookieList[i];

                if(cookie.getName().equals("SERVLETCOOKIE")){
                    String value1 = cookie.getValue();
                    logger.info("cookie found. value ="+value1 );
                }
                if(cookie.getName().equals("WSRSCOOKIE")){
                        String value2 = cookie.getValue();
                        logger.info("cookie found. value ="+value2 );
                    }
                }
            }

如果有人能帮我指出获取所有其他 cookie 的方法,那就太好了。

【问题讨论】:

  • 所以你所做的只是创建 Cookie 对象实例?您不将它们添加到实际响应中吗?
  • 我已将 cookie 对象添加到响应中,这就是我可以在浏览器上看到它们的方式。让我知道您是否知道我可以如何访问它们,现在我只能访问 JSESSIONID,正如我在问题中提到的那样。谢谢
  • 感谢大家的意见和那些真正花时间回答它的人,我最终通过使用 (javax.servlet.http.Cookie) 并设置域和路径来解决问题。这是我的观察,在我们为 /oauth/token 和 url 设置 http 模式以保护我们的 API 的安全配置文件中,我将创建会话从“从不”更改为“始终”,让我有一个 JSESSIONID cookie,我去了通过它的每一个属性,发现我没有在我的 cookie 中设置路径和域,在我设置这两个属性后,我现在可以访问我的 cookie。

标签: java spring rest cookies jersey-client


【解决方案1】:

这个问题是几年前的问题。但是今天我遇到了类似的问题。 解决方案是:如果您使用的是 Apache http 连接器,那么 jersey cookie api 似乎不受支持。 尝试通过 Apache api 获取 cookie:

public static Cookie getCookie(final ClientRequestContext clientRequestContext, final String key){
    final CookieStore cookieStore = ApacheConnectorProvider.getCookieStore(clientRequestContext.getClient());
    return cookieStore.getCookies().stream().filter(c->c.getName().equals(key)).collect(CollectorUtil.singletonOrNullCollector());
}

【讨论】:

    最近更新 更多