JSESSIONID cookie未存储

时间:2016-06-28 14:22:31

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

我有一个以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:

enter image description here

此Cookie不会随以下请求一起发送。这导致401回复:

enter image description here

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

$httpProvider.defaults.withCredentials = true;

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