Установка файлов cookie при последующем запросе в фильтре Spring SecurityJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Установка файлов cookie при последующем запросе в фильтре Spring Security

Сообщение Гость »


Наше приложение использует 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, но это не помогло
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»