2016-06-28 4 views
3

У меня есть интерфейс, написанный угловым, который работает на локальном хосте: 3002. У меня есть backend, написанный с Spring-boot, который работает на localhost: 8080.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() {} 
} 

Когда я аутентифицировать, я могу видеть, что сервер отправляет куки:

enter image description here

Этот файл cookie не отправлен со следующими запросами. Это приводит к 401 ответов:

enter image description here

Я смотрел на «ресурсы» панели хромированной консоли и выяснили, что ни печенья не были сохранены.

Любые идеи?

ответ

2

В файле, где вы настроить свой $httpProvider, добавьте эту строку, чтобы указать вы хотите отправить учетные данные с запросами межсайтовыми:

$httpProvider.defaults.withCredentials = true; 

Как правило, AngularJS будет автоматически отправлять эти печенья с запросами (для кампанией с таким же исходные запросы), но поскольку ваши запросы являются межсайтовыми, вам необходимо вручную настроить это.

Смежные вопросы