angle-left

Выставление параметров Samesite и Security для cookie в Spring

Доброе утро

Сегодня небольшая заметка по настройке Spring для корректного выставления cookie с нововведениями Chrome.

Проблема

Если сервис, запущенный внутри iframe, пытается выставить cookie без установленного SameSite и Security, то он получит отказ.

Попытки решения

  1. Выставить значение SameSite для cookie в значение none.
  2. Выставить значение Security для cookie в значение true.

Подробное описание

Был написан небольшой сервис, который отображался в iframe. В сервисе использовалась HttpSession. Передаваемый JSESSIONID игнорировался. При просмотре заголовков response было найдено предупреждение от Chrome.

This Set-Cookie didn't specify a "SameSite" attribute and was defaulted to "SameSite=Lax", and was blocked because it came from cross-site response which was not the response to a top-level navigation. 
The Set-Cookie had to have been set with "SomeSite=None" to enable cross-site usage.

Было решено выставлять для всех cookie значение samesite=none и security=true. Значение security в Spring можно легко настроить в файле application.properties. 

server.servlet.session.cookie.secure=true

А вот выставить у cookie значение samesite в none оказалось тяжелее. Было решено вставить небольшую пост обработку запроса. В конфигурационном классе Spring были написаны следующие строки.

@Bean
public ServletWebServerFactory servletContainer() {
   return new TomcatServletWebServerFactory() {
       @Override
       protected void postProcessContext(Context context) {
           Rfc6265CookieProcessor rfc6265Processor = new Rfc6265CookieProcessor();
           rfc6265Processor.setSameSiteCookies("None");
           context.setCookieProcessor(rfc6265Processor);
       }
   };
}

На этом всё. Спасибо.

Вперед