欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot2.x版本中,使用SpringSession踩的坑及解決

 更新時(shí)間:2021年07月02日 11:23:24   作者:喝酸奶的小睿睿  
這篇文章主要介紹了SpringBoot2.x版本中,使用SpringSession踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot2.x SpringSession踩坑

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$ServletSessionRepositoryValidator': Invocation of init method failed; nested exception is org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException: No session repository could be auto-configured, check your configuration (session store type is ‘redis')

這是因?yàn)槿鄙倭藄pring-session-data-redis依賴。

關(guān)于SpringBoot2.X中,引用SpringSession,同時(shí)使用Redis存儲(chǔ)緩存數(shù)據(jù)需要進(jìn)行如下配置:

 <!--SpringSession依賴-->
 <dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-core</artifactId>
 </dependency>
 <!--SpringSessionRedis依賴-->
 <dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
 </dependency>
#使用使用Redis緩存session數(shù)據(jù)
spring.session.store-type=REDIS
#Redis服務(wù)器地址
spring.redis.host=127.0.0.1
#Redis服務(wù)器端口號(hào)
spring.redis.port=6379

總結(jié):

在SpringBoot2.x的版本中,引用spring-session-core時(shí),不是對(duì)spring-session-data-redis進(jìn)行加載,需要用戶自己添加關(guān)于spring-session與redis的關(guān)聯(lián)依賴。

springboot 2.x 踩坑——跨域?qū)е聅ession問(wèn)題

目前IT界主流前后端分離,但是在分離過(guò)程中一定會(huì)存在跨域的問(wèn)題。

什么是跨域?

是指瀏覽器從一個(gè)域名的網(wǎng)頁(yè)去請(qǐng)求另一個(gè)域名的資源時(shí),域名、端口、協(xié)議任一不同,都是跨域。

遇到的場(chǎng)景

當(dāng)我們用springboot + shrio +vue 來(lái)做后臺(tái)管理的項(xiàng)目時(shí),無(wú)法獲取shiroSession當(dāng)前登錄的用戶,

于是我們就排查,網(wǎng)上說(shuō)在跨域時(shí)讓session通過(guò)就可以了

后端

@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        // 允許任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 允許任何頭
        corsConfiguration.addAllowedHeader("*");
        // 允許任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 對(duì)接口配置跨域設(shè)置
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}

前端

axios.defaults.withCredentials=true; 

但是設(shè)置后依舊不行

經(jīng)過(guò)一天的百度與排查,我回滾到springboot 1.x 居然沒(méi)有這個(gè)問(wèn)題,才定位到是升級(jí)到springboot 2.x導(dǎo)致的原因,好了,已經(jīng)抓住兇手了,這下子好對(duì)癥下藥了,去網(wǎng)上看了 springboot升級(jí)到2.x spring session 相關(guān)的問(wèn)題。

終于發(fā)現(xiàn)了新大陸,spring-session 2.x 中 Cookie里面居然引入了SameSite 這個(gè)叼毛,他默認(rèn)值是 Lax,好了咱們來(lái)看看這個(gè)是什么東西?

SameSite Cookie 是用來(lái)防止CSRF攻擊,它有兩個(gè)值:Strict、Lax

SameSite = Strict:

意為嚴(yán)格模式,表明這個(gè)cookie在任何情況下都不可能作為第三方cookie;

SameSite = Lax:

意為寬松模式,在GET請(qǐng)求是可以作為第三方cookie,但是不能攜帶cookie進(jìn)行跨域post訪問(wèn)(這就很蛋疼了,我們那個(gè)校驗(yàn)接口就是POST請(qǐng)求)

總結(jié):前端請(qǐng)求到后臺(tái),每次session都不一樣,每次都是新的會(huì)話,導(dǎo)致獲取不到用戶信息

解決方案:

將SameSite設(shè)置為空

@Configuration
public class SpringSessionConfig { 
    @Bean
    public CookieSerializer httpSessionIdResolver() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        // 取消僅限同一站點(diǎn)設(shè)置
        cookieSerializer.setSameSite(null);
        return cookieSerializer;
    }
}

問(wèn)題解決!!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java構(gòu)造器(構(gòu)造方法)能否可以被重寫

    Java構(gòu)造器(構(gòu)造方法)能否可以被重寫

    這篇文章主要介紹了Java構(gòu)造器(構(gòu)造方法)能否可以被重寫問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    相信會(huì)java的同學(xué)估計(jì)都用過(guò)replace、replaceAll、replaceFirst這三個(gè)函數(shù),可是,我們真的懂他們嗎?下面通過(guò)這篇文章大家再來(lái)好好學(xué)習(xí)學(xué)習(xí)下這幾個(gè)函數(shù)。
    2016-09-09
  • Struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例

    Struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例

    這篇文章主要介紹了Struts2單選按鈕詳解及枚舉類型的轉(zhuǎn)換代碼示例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • SpringBoot生成License的實(shí)現(xiàn)示例

    SpringBoot生成License的實(shí)現(xiàn)示例

    License指的是版權(quán)許可證,那么對(duì)于SpringBoot項(xiàng)目,如何增加License呢?本文就來(lái)介紹一下,感興趣的可以了解一下
    2021-06-06
  • springboot集成junit編寫單元測(cè)試實(shí)戰(zhàn)

    springboot集成junit編寫單元測(cè)試實(shí)戰(zhàn)

    在做單元測(cè)試時(shí),代碼覆蓋率常常被拿來(lái)作為衡量測(cè)試好壞的指標(biāo),本文主要介紹了springboot集成junit編寫單元測(cè)試實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java多線程之徹底搞懂線程池

    Java多線程之徹底搞懂線程池

    熟悉 Java 多線程編程的同學(xué)都知道,當(dāng)我們線程創(chuàng)建過(guò)多時(shí),容易引發(fā)內(nèi)存溢出,因此我們就有必要使用線程池的技術(shù)了。想要詳細(xì)了解的同學(xué)可以參考閱讀本文
    2023-03-03
  • Java獲取配置文件的值過(guò)程解析

    Java獲取配置文件的值過(guò)程解析

    這篇文章主要介紹了java獲取配置文件的值過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 如何使用Spring工具類動(dòng)態(tài)匹配url

    如何使用Spring工具類動(dòng)態(tài)匹配url

    這篇文章主要介紹了如何使用Spring工具類動(dòng)態(tài)匹配url,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java基礎(chǔ)之extends用法詳解及簡(jiǎn)單實(shí)例

    Java基礎(chǔ)之extends用法詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了 Java基礎(chǔ)之extends用法詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java Adapter 適配器模式(類適配器,對(duì)象適配器)優(yōu)缺點(diǎn)對(duì)比

    Java Adapter 適配器模式(類適配器,對(duì)象適配器)優(yōu)缺點(diǎn)對(duì)比

    這篇文章主要介紹了Java 適配器模式(類適配器,對(duì)象適配器)優(yōu)缺點(diǎn)對(duì)比的相關(guān)資料,java 適配器在基礎(chǔ)知識(shí)中還是比較重要的,這里就說(shuō)下如何使用,需要的朋友可以參考下
    2016-12-12

最新評(píng)論