最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性

 更新時(shí)間:2022年01月25日 08:49:07   作者:KevinBlandy  
Chrome 51 開(kāi)始,瀏覽器的 Cookie 新增加了一個(gè)SameSite屬性,用來(lái)防止 CSRF 攻擊和用戶追蹤。今天通過(guò)本文給大家介紹Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性,感興趣的朋友一起看看吧

Cookie除了keyvalue以外有幾個(gè)屬性。

  • httpOnly 是否允許js讀取cookie
  • secure 是否僅僅在https的鏈接下,才提交cookie
  • domain cookie提交的域
  • path cookie提交的path
  • maxAge cookie存活時(shí)間
  • sameSite 同站策略,枚舉值:Strict Lax None

其他的都很熟悉了,最后一個(gè)是 Chrome 51 開(kāi)始,瀏覽器的 Cookie 新增加了一個(gè) SameSite 屬性,用來(lái)防止 CSRF 攻擊和用戶追蹤。

關(guān)于SameSite的詳細(xì)解釋 可以看 Cookie 的 SameSite 屬性

在Javaweb應(yīng)用中 ,設(shè)置 Cookie一般都是用 javax.servlet.http.Cookie,但是SameSite屬性出來(lái)不久,Servlet庫(kù)還沒(méi)更新,所以沒(méi)有設(shè)置SameSite的方法.

javax.servlet.http.Cookie 中定義的的屬性

可以看到,還沒(méi)有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;

通過(guò) ResponseCookie 給客戶端設(shè)置Cookie

本質(zhì)上,Cookie也只是一個(gè)header。我們可以不使用Cookie對(duì)象,而通過(guò)自定義Header的方式來(lái)給客戶端設(shè)置Cookie

ResponseCookie 是Spring定義的一個(gè)Cookie構(gòu)建工具類,極其簡(jiǎn)單

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個(gè)小時(shí)候過(guò)期
				.sameSite("Lax")	// 大多數(shù)情況也是不發(fā)送第三方 Cookie,但是導(dǎo)航到目標(biāo)網(wǎng)址的 Get 請(qǐng)求除外
				.build()
				;
		
		// 設(shè)置Cookie Header
		response.setHeader(HttpHeaders.SET_COOKIE, cookie.toString());
		
		return "ok";
	}
}

響應(yīng)給客戶端的Cookie

所有屬性都響應(yīng)正確 √

HttpSession Cookie 的SameSite屬性

HttpSession依賴一個(gè)名稱叫做JSESSIONID(默認(rèn)名稱)的Cookie。

對(duì)于JSESSIONID Cookie 的設(shè)置,可以修改如下配置。但是,目前spring也沒(méi)實(shí)現(xiàn)SameSite的配置項(xiàng)。

配置類 : 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

通過(guò)修改容器的配置,對(duì)Session Cookie設(shè)置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();
			// 設(shè)置Cookie的SameSite
			cookieProcessor.setSameSiteCookies(SameSiteCookies.LAX.getValue());
			context.setCookieProcessor(cookieProcessor);
		};
	}
}

Spring Session的SameSite屬性

通過(guò)自定義 CookieSerializer 設(shè)置 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");  // 設(shè)置SameSite屬性
		serializer.setUseHttpOnlyCookie(true);
		serializer.setUseSecureCookie(false);
		return serializer;
	}
}

首發(fā):https://springboot.io/t/topic/2602

到此這篇關(guān)于Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性的文章就介紹到這了,更多相關(guān)Springboot設(shè)置Cookie的SameSite屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用java8的方法引用替換硬編碼的示例代碼

    使用java8的方法引用替換硬編碼的示例代碼

    這篇文章主要介紹了使用java8的方法引用替換硬編碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)

    SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)

    這篇文章主要介紹了SpringCloud?Zuul微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • java多線程編程之使用runnable接口創(chuàng)建線程

    java多線程編程之使用runnable接口創(chuàng)建線程

    實(shí)現(xiàn)Runnable接口的類必須使用Thread類的實(shí)例才能創(chuàng)建線程,通過(guò)Runnable接口創(chuàng)建線程分為以下兩步
    2014-01-01
  • MyBatis中的N+1問(wèn)題的解決方法

    MyBatis中的N+1問(wèn)題的解決方法

    本文主要介紹了MyBatis中的N+1問(wèn)題的四種解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • redis incr和incrBy的使用說(shuō)明

    redis incr和incrBy的使用說(shuō)明

    這篇文章主要介紹了redis incr和incrBy的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • DolphinScheduler容錯(cuò)Master源碼分析

    DolphinScheduler容錯(cuò)Master源碼分析

    這篇文章主要為大家介紹了DolphinScheduler容錯(cuò)Master源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 在idea環(huán)境下構(gòu)建springCloud項(xiàng)目

    在idea環(huán)境下構(gòu)建springCloud項(xiàng)目

    本篇文章主要介紹了在idea環(huán)境下構(gòu)建springCloud項(xiàng)目,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Java Http接口加簽、驗(yàn)簽操作方法

    Java Http接口加簽、驗(yàn)簽操作方法

    下面小編就為大家?guī)?lái)一篇Java Http接口加簽、驗(yàn)簽操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • java Lambda表達(dá)式的使用心得

    java Lambda表達(dá)式的使用心得

    這篇文章主要介紹了java Lambda表達(dá)式的使用心得,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 深入理解Java之HashMap源碼剖析

    深入理解Java之HashMap源碼剖析

    這篇文章主要介紹了深入理解Java之HashMap源碼剖析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論

吕梁市| 莆田市| 漳州市| 六枝特区| 天全县| 昭通市| 卢龙县| 辛集市| 广丰县| 贺州市| 都匀市| 环江| 濉溪县| 伊川县| 南靖县| 绥中县| 南皮县| 阿勒泰市| 正镶白旗| 龙南县| 乐清市| 依安县| 横山县| 共和县| 武胜县| 泗阳县| 石林| 建水县| 四会市| 平和县| 八宿县| 祁阳县| 威宁| 绵阳市| 安平县| 闸北区| 克拉玛依市| 上虞市| 类乌齐县| 周口市| 富川|