返回顶部
首页 > 资讯 > 后端开发 > Python >详解Springboot应用中设置Cookie的SameSite属性
  • 709
分享到

详解Springboot应用中设置Cookie的SameSite属性

2024-04-02 19:04:59 709人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Cookie除了key和value以外有几个属性。 HttpOnly 是否允许js读取cookiesecure 是否仅仅在https的链接下,才提交cookiedomain cook

Cookie除了keyvalue以外有几个属性。

  • HttpOnly 是否允许js读取cookie
  • secure 是否仅仅在https的链接下,才提交cookie
  • domain cookie提交的域
  • path cookie提交的path
  • maxAge cookie存活时间
  • sameSite 同站策略,枚举值:Strict Lax None

其他的都很熟悉了,最后一个是 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。

关于SameSite的详细解释 可以看 Cookie 的 SameSite 属性

javaweb应用中 ,设置 Cookie一般都是用 javax.servlet.http.Cookie,但是SameSite属性出来不久,Servlet库还没更新,所以没有设置SameSite的方法.

javax.servlet.http.Cookie 中定义的的属性

可以看到,还没有SameSite的定义

//
// The value of the cookie itself.

private String name; // NAME= ... "$Name" style is reserved
private String value; // value of NAME
// Attributes encoded in the header's cookie fields.
private String comment; // ;Comment=VALUE ... describes cookie's use
// ;Discard ... implied by maxAge < 0
private String domain; // ;Domain=VALUE ... domain that sees cookie
private int maxAge = -1; // ;Max-Age=VALUE ... cookies auto-expire
private String path; // ;Path=VALUE ... URLs that see the cookie
private boolean secure; // ;Secure ... e.g. use SSL
private int version = 0; // ;Version=1 ... means RFC 2109++ style
private boolean isHttpOnly = false;

通过 ResponseCookie 给客户端设置Cookie

本质上,Cookie也只是一个header。我们可以不使用Cookie对象,而通过自定义Header的方式来给客户端设置Cookie

ResponseCookiespring定义的一个Cookie构建工具类,极其简单

import java.time.Duration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseCookie;
import org.springframework.WEB.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
public class TestController {
	
	@GetMapping("/test")
	public Object test (HttpServletRequest request,
					HttpServletResponse response) throws Exception {
		
		ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue") // key & value
				.httpOnly(true)		// 禁止js读取
				.secure(false)		// 在http下也传输
				.domain("localhost")// 域名
				.path("/")			// path
				.maxAge(Duration.ofHours(1))	// 1个小时候过期
				.sameSite("Lax")	// 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外
				.build()
				;
		
		// 设置Cookie Header
		response.setHeader(HttpHeaders.SET_COOKIE, cookie.toString());
		
		return "ok";
	}
}

响应给客户端的Cookie

所有属性都响应正确 √

HttpSession Cookie 的SameSite属性

HttpSession依赖一个名称叫做JSESSIONID(默认名称)的Cookie。

对于JSESSIONID Cookie 的设置,可以修改如下配置。但是,目前spring也没实现SameSite的配置项。

配置类 : org.springframework.boot.web.servlet.server.Cookie

server.servlet.session.cookie.comment
server.servlet.session.cookie.domain
server.servlet.session.cookie.http-only
server.servlet.session.cookie.max-age
server.servlet.session.cookie.name
server.servlet.session.cookie.path
server.servlet.session.cookie.secure

通过修改容器的配置,对Session Cookie设置SameSite属性

import org.apache.Tomcat.util.http.Rfc6265CookieProcessor;
import org.apache.tomcat.util.http.SameSiteCookies;
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfiguration {
	@Bean
	public TomcatContextCustomizer sameSiteCookiesConfig() {
		return context -> {
			final Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor();
			// 设置Cookie的SameSite
			cookieProcessor.setSameSiteCookies(SameSiteCookies.LAX.getValue());
			context.setCookieProcessor(cookieProcessor);
		};
	}
}

Spring Session的SameSite属性

通过自定义 CookieSerializer 设置 SameSite属性

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.CookieSerializer;

import com.video.common.spring.session.DynamicCookieMaxAgeCookieSerializer;
@Configuration
public class SpringSessionConfiguration {
	
	@Bean
	public CookieSerializer cookieSerializer() {
		DynamicCookieMaxAgeCookieSerializer serializer = new DynamicCookieMaxAgeCookieSerializer();
		serializer.setCookieName("JSESSIONID");
		serializer.setDomainName("localhost");
		serializer.setCookiePath("/");
		serializer.setCookieMaxAge(3600);
		serializer.setSameSite("Lax");  // 设置SameSite属性
		serializer.setUseHttpOnlyCookie(true);
		serializer.setUseSecureCookie(false);
		return serializer;
	}
}

首发:https://SpringBoot.io/t/topic/2602

到此这篇关于Springboot应用中设置Cookie的SameSite属性的文章就介绍到这了,更多相关Springboot设置Cookie的SameSite属性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Springboot应用中设置Cookie的SameSite属性

本文链接: https://lsjlt.com/news/163643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Springboot应用中设置Cookie的SameSite属性
    Cookie除了key和value以外有几个属性。 httpOnly 是否允许js读取cookiesecure 是否仅仅在https的链接下,才提交cookiedomain cook...
    99+
    2024-04-02
  • Springboot应用中如何设置Cookie的SameSite属性
    这篇文章主要为大家展示了“Springboot应用中如何设置Cookie的SameSite属性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Springboot应用中如何设置Cookie的Sam...
    99+
    2023-06-29
  • Cookie的SameSite属性怎么用
    这篇文章将为大家详细讲解有关Cookie的SameSite属性怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Chrome 51 开始,浏览器的 Cookie 新...
    99+
    2024-04-02
  • 分析Cookie SameSite属性及其在ASP.NET项目中的应用
    本篇内容主要讲解“分析Cookie SameSite属性及其在ASP.NET项目中的应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Cookie Same...
    99+
    2024-04-02
  • Cookie中怎么设置HttpOnly属性
    这篇文章将为大家详细讲解有关Cookie中怎么设置HttpOnly属性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。利用拦截器实现,判断每次请求的响应是否包含SET-COOKIE头部,重写会...
    99+
    2023-06-04
  • Dataformatstring属性设置(详解)
    DataFormatString属性是用于设置数据呈现格式的属性。它可用于各种数据控件,如Label、GridView、DataLi...
    99+
    2023-09-15
    属性
  • Springboot中项目的属性配置的详细介绍
    目录正文1. 少量配置信息的情形2. 多个配置信息的情形3. 指定项目配置文件4. 总结正文 我们知道,在项目中,很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会...
    99+
    2024-04-02
  • SpringBoot + MapStruct 属性映射工具的使用详解
    1. MapStruct 是什么? 截取下官方的原话 我给翻译了一下 说白了 当你的对象A有几十个属性 而另一个对象B 与A比较只有一些细微的差别 那么这时候只需要映射过去即可 而...
    99+
    2024-04-02
  • Java 用反射设置对象的属性值实例详解
    Java 用反射设置对象的属性值实例详解private Object invoke(Object obj, String fieldName, Object value) { String firstWord = fieldName.su...
    99+
    2023-05-31
    java 反射 对象
  • Python中property属性的用处详解
    目录前言限制值使用 @property 的方式代替。动态属性的好处动态显示附:用property代替getter和setter方法总结前言 Python 动态属性的概念可能会被面试问...
    99+
    2024-04-02
  • 详解javascript中offsetleft属性的用法
    offsetLeft属性是JavaScript中DOM元素的一个属性,用于获取一个元素相对于其父元素的水平偏移量。具体用法如下:1....
    99+
    2023-08-17
    javascript
  • Django中Cookie设置及跨域问题处理详解
    目录什么是Cookie(翻译:曲奇饼干)Cookie怎么来的为什么要用CookieCookie的特点怎么设置CookieCookie常用参数怎么获取CookieCookie跨域问题处...
    99+
    2024-04-02
  • Android中的windowSoftInputMode属性详解
        在前面的一篇文章中,简单的介绍了一下如何实现软键盘不自动弹出,使用的方法是设置android:windowSoftInputMode属性。...
    99+
    2022-06-06
    Android
  • 详解Spring中的Transactional属性
    目录一、Transactional二、使用说明三、注解失效问题一、Transactional 声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创...
    99+
    2024-04-02
  • Vue中的computed属性详解
    目录插值表达式methodscomputed总结今天来说说vue中的计算属性computed,为了更好的理解计算属性的好处,我们先通过一个案例来慢慢 了解计算属性,有如下案例:定义两...
    99+
    2024-04-02
  • springboot配置文件中属性变量引用方式@@解读
    目录springboot配置文件中属性变量引用@@引用属性变量方式之@@和${}的用法熟悉的环境区分配置方式@@到底是什么?${}和@@的使用总结springboot配置文件中属性变...
    99+
    2023-05-14
    springboot配置文件 springboot属性变量引用 springboot @@
  • Cookie的工作原理和应用详解
    目录1. Cookie 原理1.1 Cookie 背景信息1.2 Cookie 工作原理1.3 Cookie 创建、获取、修改1.4 Cookie 共享范围1.5 Cookie 生命...
    99+
    2024-04-02
  • SpringBoot 属性配置中获取值的方式
    目录SpringBoot 属性配置中获取值首先,定义一个实体类去写属性测试和生产区分SpringBoot 获取值和配置文件1、@ConfigurationProperties(pre...
    99+
    2024-04-02
  • Android中persistent属性用法详解
    本文实例讲述了Android中persistent属性用法。分享给大家供大家参考,具体如下: 前段时间在研究telephony时,一直没有在framework下发现对telep...
    99+
    2022-06-06
    Android
  • CSS中background属性的应用
    这篇文章主要讲解了“CSS中background属性的应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS中background属性的应用”吧!CSS中...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作