Установить атрибут SameSite для JSESSIONID cook ie - приложение JHipster - PullRequest
2 голосов
/ 04 августа 2020

Я пытаюсь установить атрибут SameSite для JSESSIONID cook ie в нашем шлюзе JHipster, и при попытке проверить в Chrome для него ничего не отображается в столбце SameSite. Возможно, примечание: в настоящее время мы не развернули и не запускаем приложение локально по HTTP (адрес localhost). Однако работа в режиме TLS также имеет ту же проблему.

Это две вещи, которые я пробовал, чтобы это работало:

  1. Второй подход из первого ответа здесь Как включить samesite для jsessionid cook ie - фильтр, который используется в файле SecurityConfiguration. java JHipster в методе configure().

import java.io.IOException;
import java.util.Collection;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.HttpHeaders;

public class SameSiteFilter implements javax.servlet.Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
        addSameSiteCookieAttribute((HttpServletResponse) response); // add SameSite=strict cookie attribute
    }

    private void addSameSiteCookieAttribute(HttpServletResponse response) {
        Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
        boolean firstHeader = true;
        for (String header : headers) { // there can be multiple Set-Cookie attributes
            if (firstHeader) {
                response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=Strict"));
                firstHeader = false;
                continue;
            }
            response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=Strict"));
        }
    }

    @Override
    public void destroy() {

    }
}
A CookieSerializer который мы получили от внутреннего партнера:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.DefaultCookieSerializer;
import org.springframework.session.web.http.CookieSerializer;
 
@Configuration
class CookieConfiguration {

    @Bean
    public static CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setSameSite("Lax");
        return serializer;
    }
}

Ни то, ни другое не работает. Есть ли что-нибудь еще, что мы можем попробовать для этого особого аромата весны?

...