我有一个以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。
有什么想法吗?
答案 0 :(得分:2)
在配置$httpProvider
的文件中,添加此行以指定您要发送包含跨网站请求的凭据:
$httpProvider.defaults.withCredentials = true;
通常,AngularJS会自动发送带有请求的cookie(针对同源请求),但由于您的请求是跨站点的,因此您必须手动配置它。