首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为jsessionid cookie启用samesite

如何为jsessionid cookie启用samesite
EN

Stack Overflow用户
提问于 2018-04-07 00:40:09
回答 5查看 43.6K关注 0票数 21

如何为在wildfly as上运行的web应用程序启用samesite。但是,Checked standalone.xml无法在其中找到适当的标签

代码语言:javascript
运行
复制
<servlet-container name="default">
    <session-cookie http-only="true" secure="true"/>
    <jsp-config/>
</servlet-container>
EN

回答 5

Stack Overflow用户

发布于 2019-05-17 14:58:16

一种解决方法是使用另一个属性(例如comment)将SameSite设置修改到cookie中:

代码语言:javascript
运行
复制
<servlet-container name="default">
    <jsp-config/>
    <session-cookie comment="; SameSite=None"/>
    <websockets/>
</servlet-container>

但是,由于Undertow在使用版本0或版本1cookie时会引用注释(和其他)值,因此需要在将io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION系统属性设置为true的情况下运行JBoss/WildFly

代码语言:javascript
运行
复制
 ./bin/standalone.sh -Dio.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION=true

这将为您提供所需的结果:

这种方法显然很老套,完全依赖于Undertow实现细节,所以我建议在web服务器或负载均衡器级别上进行配置。

票数 8
EN

Stack Overflow用户

发布于 2020-02-25 16:37:40

对于当前最新版本的Spring Boot:

如果您没有最新的spring-boot-starter-tomcat,请检查SameSiteCookies枚举中的值UNSET,如果缺少该值,则需要一个较新的版本,因为它将跳过值SameSite=None

代码语言:javascript
运行
复制
@Component
public class SameSiteTomcatCookieProcessorCustomizationBean implements WebServerFactoryCustomizer<TomcatServletWebServerFactory>
{
    @Override
    public void customize(TomcatServletWebServerFactory server) {

        server.getTomcatContextCustomizers().add(new TomcatContextCustomizer()
        {
            @Override
            public void customize(Context context)
            {
                Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor();
                cookieProcessor.setSameSiteCookies("None");
                context.setCookieProcessor(cookieProcessor);
            }
        });
    }
}
票数 7
EN

Stack Overflow用户

发布于 2020-03-13 18:52:58

我的变通方法是一个自定义处理程序,适用于JBoss EAP7.2。我将其用作全局处理程序。但是您也可以在jboss-web.xml中使用它。你需要尝试cookie实现,因为undertow只允许严格或宽松的相同站点(如果你使用cookie.setSameSiteMode(“None”),它会抛出“”UT000162: Same-site attribute None is invalid.它必须是严格的或宽松的“”)

代码语言:javascript
运行
复制
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import io.undertow.server.handlers.Cookie;
import java.lang.reflect.Proxy;
import java.util.Map;

public class CookieSameSiteHandler implements HttpHandler
{
   private  HttpHandler next;

   public CookieSameSiteHandler(HttpHandler next){
      this.next = next;
   }

   @Override
   public void handleRequest(final HttpServerExchange exchange)
      throws Exception
   {
      exchange.addResponseCommitListener(serverExchange -> {
         for (Map.Entry<String, Cookie> responcecookie : serverExchange.getResponseCookies().entrySet()){
            serverExchange.getResponseCookies().replace(responcecookie.getKey(), proxyCookie(responcecookie.getValue()));
         }
      });
      next.handleRequest(exchange);
   }

   private Cookie proxyCookie(Cookie cookie)
   {
      return (Cookie)Proxy.newProxyInstance(
         cookie.getClass().getClassLoader(),
         cookie.getClass().getInterfaces(),
         (proxy, method, args) -> {
            if ("isSameSite".equals(method.getName())){
               return true;
            }
            if ("getSameSiteMode".equals(method.getName()) && cookie.getSameSiteMode() == null){
               return "None";
            }
            if ("isSecure".equals(method.getName()) && cookie.getSameSiteMode() == null){
               return true;
            }
            return method.invoke(cookie, args);
         });
   }
}

处理程序配置:

代码语言:javascript
运行
复制
<subsystem xmlns="urn:jboss:domain:undertow:7.0" default-virtual-host="default-host">
    <buffer-cache name="default"/>
    <server name="default-server" default-host="default-host">
        ...
        <host name="default-host" alias="localhost,example.com">
            ...
            <filter-ref name="cookiehandler"/>
            ...
        </host>
    </server>
    ...
    <filters>
        <filter class-name="nl.myownstuff.handler.CookieSameSiteHandler" module="nl.myownstuff.undertow" name="cookiehandler"/>
    </filters>
</subsystem>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49697449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档