Наше приложение использует 2 URL-адреса. Один — "example.com", другой – "my.example.com". Первое является общедоступным достоянием нашего приложения, тогда как второе предназначено для использования только вошедшими в систему пользователями.
Проблема, по-видимому, заключается в следующем: когда мы пытаемся отправить запрос просто от "example.com" к части нашего приложения, требующей аутентификации, мы получаем ошибку 403.
р>
Вот как это работает:
[*]Пользователь отправляет запрос на example.com (например, выполняет вызов отдыха) [*]Запрос улавливается фильтром безопасности Spring, и пользователь перенаправляется на "my.example.com" [*]Файлы cookie на "my.example.com" отсутствуют в заголовках запроса, поэтому мы получаем 403
Код фильтра, перенаправляющего пользователя, следующий:
@Override public void doFilter (запрос ServletRequest, ответ ServletResponse, цепочка FilterChain) выдает IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) запрос; HttpServletResponse httpServletResponse = (HttpServletResponse) ответ; // исправляем CORS if (httpServletRequest.getMethod().equals("ОПЦИИ")) { addCorsHeaders (httpServletResponse); возвращаться; } Строка contextPath = httpServletRequest.getContextPath(); Строковый путь = httpServletRequest.getRequestURI().substring(contextPath.length()); Строковый метод = httpServletRequest.getMethod(); обеспеченияEvalSet(httpServletRequest); Строка currentHost = httpServletRequest.getHeader("хост"); // "example.com" String myUrl = CutProtocolPart(getSessionAttribute(httpServletRequest, MY_URL)); // "мой.пример.com" // Много неинформативной бизнес-логики, которую можно упростить до // следующее: "my.example.com" равно "my.example.com" если (cabinetHostEqualsRequestHost (currentHost, myUrl)) { // мы просто фильтруем цепочку... Chain.doFilter(запрос, ответ); } еще { //здесь мы перенаправляем пользователя с «example.com» на «my.example.com» String redirectUrl = getUrlToRedirect(myUrl, httpServletRequest); // "мой.пример.com" // дополнительно добавляем заголовки CORS addCorsHeaders (httpServletResponse); httpServletResponse.setHeader("Местоположение", redirectUrl); httpServletResponse.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); } } частная пустота addCorsHeaders (HttpServletResponse httpServletResponse) { httpServletResponse.setHeader("Access-Control-Allow-Origin", "*"); httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); httpServletResponse.setHeader("Access-Control-Max-Age", "3600"); httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type"); // предполагалось, что файлы cookie будут передаваться между «example.com» и «my.example.com» httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true"); } Вот как это воспроизводится в Chrome:
Вот запрос, который выполняет перенаправление (с "example.com", с файлами cookie и заголовками аутентификации)

А вот второй запрос к "my.example.com" с отсутствующими файлами cookie запроса

Мой вопрос: как скопировать файлы cookie запроса на второй запрос из первого, чтобы пользователь аутентифицировался?
Я пытался добавить файл cookie Access-Control-Allow-Credentials, но это не помогло
Мобильная версия