【问题标题】:JSESSIONID cookie not storedJSESSIONID cookie 未存储
【发布时间】: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。

有什么想法吗?

【问题讨论】:

    标签: javascript java angularjs spring-boot spring-security


    【解决方案1】:

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

    $httpProvider.defaults.withCredentials = true;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 2018-02-16
      • 1970-01-01
      • 2013-11-01
      • 2011-04-27
      • 2019-08-05
      • 2016-09-01
      • 2012-05-21
      相关资源
      最近更新 更多