서브렛을 사용하여 SameSite Cookie 설정
개요
2021년 4월까지 서브렛의 사양 범위 내에서는 쿠키의 SameSite 속성을 설정할 수 없습니다.
따라서 각 응용 서버(소파 컨테이너)에 의존해 준비하는 독특한 방법이 필요하다.
이 글에는 Tomcat9, WildFrly 23.0.0이 있다.Final, Jetty 9을 사용하여 각각 SameSite 속성을 설정하는 방법을 봅니다.
다음 창고
clone
를 미리 준비하세요.소파 시기에 세션을 가져와 세션 ID를 추가한 쿠키를 발행한다.
또 이름
demo
은 명시치foobar
의 쿠키다.쿠키 2개를 발매한 셈이다.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// Cookieを返すためにセッションを作る
req.getSession();
// 明示的なCookieの追加もしておく
Cookie cookie = new Cookie("demo", "foobar");
resp.addCookie(cookie);
resp.setContentType("text/plain");
try (PrintWriter out = resp.getWriter()) {
out.print("Hello, world!");
out.flush();
}
}
Tomcat
Tomcat에는 읽기 및 쓰기 쿠키
org.apache.tomcat.util.http.CookieProcessor
인터페이스가 있습니다.설치 클래스
org.apache.tomcat.util.http.Rfc6265CookieProcessor
를 설정하여 SameSite 속성을 작성할 수 있습니다.META-INF/context.xml
(즉 마븐이 구축되기 전src/main/webapp/META-INF/context.xml
입니다.<?xml version="1.0" encoding="UTF-8"?>
<Context>
<CookieProcessor
className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="none"/>
</Context>
mvn package
로 WAR 파일을 제작하고 다음 명령으로 Tomcat을 실행하여 WAR 파일을 처리한다.docker run --rm -p 8080:8080 \
-v $PWD/target/demo.war:/usr/local/tomcat/webapps/demo.war \
tomcat:9
curl
를 통해 동작을 확인한다.curl -vL localhost:8080/demo
응답에서 Set-Cookie
제목을 발췌합니다.< Set-Cookie: JSESSIONID=310DBCB36C68017E053650569D93D431; Path=/demo; HttpOnly; SameSite=None
< Set-Cookie: demo=foobar; SameSite=None
SameSite 속성이 설정되어 있습니다.WildFly
WildFly 는 버전 19 에서 SameSite 를 지원합니다.
WEB-INF/undertow-handlers.conf
.samesite-cookie(mode=none)
는 Tomcat과 같은 경우mvn package
로 WAR 파일을 만들어 동작 확인을 한다.docker run --rm -p 8080:8080 \
-v $PWD/target/demo.war:/opt/jboss/wildfly/standalone/deployments/demo.war \
jboss/wildfly:23.0.0.Final
와 Tomcat의 상황은 같고 실행curl
확인Set-Cookie
응답 헤드.< Set-Cookie: JSESSIONID=4WORL56grEURqybqfuSqRSnwkRxnzUCt516a1iGm.7b70a942134b; path=/demo; secure; SameSite=None
< Set-Cookie: demo=foobar; secure; SameSite=None
SameSite 속성이 설정되어 있습니다.Jetty
마지막은 제티야.
web.xml
에서 comment
요소cookie-config
의 하위 요소)에 대해 특정한 주석을 설정하는 불가사의한 방법으로 (솔직히 별로 좋아하지 않는 방법을) 실현했다.<session-config>
<cookie-config>
<comment>__SAME_SITE_NONE__</comment>
</cookie-config>
</session-config>
mvn package
에서 WAR 파일을 만들어 동작 확인을 한다.docker run --rm -p 8080:8080 \
-v $PWD/target/demo.war:/var/lib/jetty/webapps/demo.war \
jetty:9
실행curl
을 통해 얻은 Set-Cookie
응답의 첫 부분은 다음과 같다.< Set-Cookie: JSESSIONID=node07t0uojz6ahpu17u2eknzti9dl0.node0; Path=/demo; SameSite=None
< Set-Cookie: demo=foobar
위에서 설명한 대로 세션 ID에는 SameSite만 포함되어 있습니다.명시적으로 작성된 쿠키는 코드로 주석을 설정해야 합니다.
cookie.setComment("__SAME_SITE_NONE__");
동작을 재확인한 후demo=foobar
에도 SameSite 속성이 첨부되어 있습니다.< Set-Cookie: JSESSIONID=node02lu7plc1tgx51vwiwqigcr75n0.node0; Path=/demo; SameSite=None
< Set-Cookie: demo=foobar; SameSite=None
이상.
Reference
이 문제에 관하여(서브렛을 사용하여 SameSite Cookie 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/backpaper0/articles/b8d624990d09169abf81텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)