2016-06-28 427 views
3

我有一個在localhost上運行的角度編寫的前端:3002。 我有一個用localhost:8080運行的Spring-boot編寫的後端。JSESSIONID Cookie不存儲

我添加了一個過濾器來處理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

我看着鉻控制檯的「資源」面板,並發現沒有Cookie保存。

任何想法?

回答

2

在您配置$httpProvider文件,加入這一行,以指定要與跨站點請求發送憑據:

$httpProvider.defaults.withCredentials = true; 

通常,AngularJS會自動發送請求這些Cookie(適用於same-原始請求),但由於您的請求是跨站點的,因此您必須手動配置此操作。