Google chrome внес изменения, которые требуют установки заголовка Same-Site. Чтобы добиться этого, я добавил специальный фильтр следующим образом:
public class SameSiteFilter extends GenericFilterBean {
private Logger LOG = LoggerFactory.getLogger(SameSiteFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse)response;
response = addSameSiteCookieAttribute((HttpServletResponse) response);
chain.doFilter(request, response);
}
private HttpServletResponse addSameSiteCookieAttribute(HttpServletResponse response) {
Collection<String> header = response.getHeaders(HttpHeaders.SET_COOKIE);
LOG.info(String.format("%s; %s", header, "SameSite=None; Secure"));
response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=None; Secure"));
return response;
}
}
Ниже приведен код для конфигурации безопасности
@Configuration
@EnableWebMvcSecurity
public class CustomSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private OnyxUserDetailsService onyxUserDetailsService;
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/rest/user", "/info/**/*","/rest/version/check")
.permitAll().antMatchers("/data/**/*")
.access("hasRole('ROLE_ADMIN')").anyRequest()
.fullyAuthenticated().and().httpBasic().realmName("ADOBENET")
.and().logout().
logoutSuccessHandler((new LogoutSuccessHandler() {
@Override
public void onLogoutSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
response.setStatus(HttpStatus.OK.value());
response.getWriter().flush();
}
})).deleteCookies("JSESSIONID", "XSRF-TOKEN")
.invalidateHttpSession(true).logoutUrl("/rest/logout")
.logoutSuccessUrl("/rest/user").and()
.addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
.addFilterAfter(new SameSiteFilter(), BasicAuthenticationFilter.class)
.csrf().disable();
}
@Override
@Order(Ordered.HIGHEST_PRECEDENCE)
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
}
Однако, когда я смотрю на полученные заголовки, я получить это
![enter image description here](https://i.stack.imgur.com/Y5kWg.png)
Фильтр добавляет обязательные поля во все ответы, за исключением того, которое содержит JSESSIONID cook ie. Как добавить заголовки к этому повару ie. Я попытался настроить параметры tomcat, но мы развернули код в виде файла WAR, поэтому он также не работал.