spring低版本设置cookie的samesite属性

场景:比较古老的项目了,ssh架子,Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,可用于防止 CSRF 攻击和用户追踪。因此需要给其字段赋值。

网上找了很多资源,由于jar版本比较低,没有samesite字段,尝试过继承cookie重写类,修改tomcat配置等方式,均不可用;

查看了一些文档,最直接的方式试了下,可行:

private xxx xxx(){            
String sessionValue=((HttpServletRequest) request).getSession().getId();
			addSameSiteAttribute((HttpServletResponse)response,sessionValue);
			filter.doFilter(request, response);
}

//自定修改cookie某属性内容
private void addSameSiteAttribute(HttpServletResponse response,String sessionValue) {
	//如果需要修改多个cookie属性 使用	response.addHeader(),内容格式与下方一致
response.setHeader("Set-Cookie","JSESSIONID="+sessionValue+";Path=/imService;HttpOnly=true;Secure;SameSite=Strict");

	}

SameSite可以设置为三个属性strict,Lax,None

strict属性:该属性表示表示完全禁止第三方cookie,也就是在跨站时,均不会携带cookie,只有当前站点的url和访问的站点的url一致时,才能携带cookie。但是我们此时想一种情况,比如说当前站点A存在一个链接,链接到gitte网站,如果我们之前已经登录了gitte网站的话,则我们再次访问该网站时应该是处于登录状态的。但是我们对当前站点cookie设置了SameSite属性为strict值,所以当前跳转链接并不会携带cookie,所以我们的信息无法得到认证,此时就需要重新登录

Set-Cookie: CookieName=CookieValue; SameSite=strict;

Lax:该属性比strict的属性要宽松一些,其允许我们在跨站使用get请求时(不准确,比如ajaxget)携带cookie。(重定向和window.open 是get请求

Set-Cookie: CookieName=CookieValue; SameSite=Lax;

None属性:chrome默认将Lax设置为默认值,此时我们可以更改samesite的值,将其设置为none,此时必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

Set-Cookie: widget_session=abc123; SameSite=None;Secure;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值