JSESSIONID cookie 未存储

Posted

技术标签:

【中文标题】JSESSIONID cookie 未存储【英文标题】:JSESSIONID cookie not stored 【发布时间】:2016-10-30 22:28:42 【问题描述】:

我有一个用 Angular 编写的前端,它在 localhost:3002 上运行。 我有一个用 Spring-boot 编写的后端,它在 localhost:8080 上运行。

我添加了一个过滤器来处理 CORS(我在 SO 上找到并适应了我的需要):

@Component
public class CORSFilter implements Filter 

    @Override
    public void init(FilterConfig filterConfig) throws ServletException 
    

    @Override
    public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain) throws IOException, ServletException 
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:3002");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(request, response);
    

    public void destroy() 

当我进行身份验证时,我可以看到服务器发送了一个 cookie:

此 cookie 不会随以下请求一起发送。这导致 401 响应:

我查看了 chrome 控制台的“资源”面板,发现没有存储任何 cookie。

有什么想法吗?

【问题讨论】:

【参考方案1】:

在您配置$httpProvider 的文件中,添加此行以指定您要通过跨站点请求发送凭据:

$httpProvider.defaults.withCredentials = true;

通常,AngularJS 会自动发送这些带有请求的 cookie(对于同源请求),但由于您的请求是跨站点的,因此您必须手动配置。

【讨论】:

以上是关于JSESSIONID cookie 未存储的主要内容,如果未能解决你的问题,请参考以下文章

在 JS 中获取 JSESSIONID cookie 值

Jsessionid和cookie的区别与联系

http 请求头的Cookie中的 JSESSIONID 是什么?

jsessionid與cookie關係的理解

JSESSIONID 是如何传递的?作为标头参数还是作为 cookie 参数?

java jsessionid啥时候 生成的