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

Spring?Session(分布式Session共享)實(shí)現(xiàn)示例

 更新時(shí)間:2023年01月17日 14:42:16   作者:幽默涵養(yǎng)miss?u  
這篇文章主要介紹了Spring?Session(分布式Session共享)實(shí)現(xiàn)示例,文章內(nèi)容詳細(xì),需要的朋友可以參考下

HttpSession的實(shí)現(xiàn)流程

1.當(dāng)用戶訪問(wèn)服務(wù)器端時(shí),服務(wù)器端會(huì)判斷請(qǐng)求是否攜帶包含JSESSIONID的Cookie。

如果沒(méi)有攜帶,服務(wù)器端會(huì)創(chuàng)建一個(gè)Cookie,key為JSESSIONID,value是長(zhǎng)字符串(唯一字符串)。

同時(shí)會(huì)實(shí)例化一個(gè)Session對(duì)象。把Session對(duì)象放入到全局Map中,Map的key是Cookie的value,Map的value就是Session對(duì)象。

同時(shí)設(shè)置Session對(duì)象屬性的值,記錄creationTime創(chuàng)建實(shí)現(xiàn)、id是JSESSIONID對(duì)應(yīng)值、lastAccessedTime最后一次訪問(wèn)時(shí)間、maxInactiveInterval 最大存活時(shí)間

2.服務(wù)器響應(yīng)給客戶端結(jié)果,響應(yīng)對(duì)象中包含Cookie內(nèi)容,Cookie就會(huì)存儲(chǔ)在客戶端。

3.客戶端再次請(qǐng)求服務(wù)器端時(shí)會(huì)自動(dòng)攜帶Cookie內(nèi)容。

4.服務(wù)器端再次接收請(qǐng)求后發(fā)現(xiàn)請(qǐng)求中Cookie帶有JSESSIONID,根據(jù)JSESSIONID的值進(jìn)行從Map中取出Session對(duì)象,會(huì)判斷l(xiāng)astAccessedTime和maxActiveInterval屬性,判斷Session是否失效,如果失效執(zhí)行a)步驟重新創(chuàng)建Session對(duì)象。

如果沒(méi)有失效修改lastAccessedTime為當(dāng)前訪問(wèn)時(shí)間。

Tomcat中的HttpSession實(shí)現(xiàn)

 當(dāng)向Session作用域存儲(chǔ)值時(shí)執(zhí)行上面Session原理,把Session對(duì)象取出后,Session作用域的值就存儲(chǔ)在全局Map屬性(此Map屬性是Session對(duì)象的全局屬性) ?

既然HttpSession存儲(chǔ)值時(shí)是一個(gè)全局Map,所以依然可以使用Redis這種鍵值對(duì)NoSQL數(shù)據(jù)庫(kù)來(lái)替代這個(gè)Map,也就是存自定義實(shí)現(xiàn)時(shí)用Redis存儲(chǔ)以前放在Session中值。

使用

導(dǎo)入依賴

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

編輯配置文件

server:
  port: 8000
spring:
  redis:
    host: 192.168.8.128

編輯啟動(dòng)類(lèi)

/**
 * EnableRedisHttpSession - 讓Spring Session分布式會(huì)話共享技術(shù)生效。
 */
@SpringBootApplication
@EnableRedisHttpSession
public class Web1App{
	public static void main(String[] args){
		SpringApplication.run(Web1App.class, args);
	}
}

編輯控制器

@RestController
public class Web1Controller {
    @RequestMapping("/set")
    public String demo(HttpSession session, String attName, String attValue){
        session.setAttribute(attName, attValue);
        return "WEB1工程:已設(shè)置' " + attName + " = " + attValue + " '到會(huì)話變量作用域";
    }
    @RequestMapping("/get")
    public String demo(HttpSession session, String attName){
        Object attValue = session.getAttribute(attName);
        System.out.println("從會(huì)話中獲取" + attName + "變量,值是:" + attValue);
        return "WEB1工程:從會(huì)話中獲取" + attName + "變量,值是:" + attValue;
    }
}

@EnableRedisHttpSession注解屬性

@SpringBootApplication
@EnableRedisHttpSession(redisNamespace = "bjsxt:session", maxInactiveIntervalInSeconds = 3600,
        flushMode = FlushMode.ON_SAVE, saveMode = SaveMode.ON_SET_ATTRIBUTE,
        cleanupCron = "0 * * * * *"
)
public class Web1App {
    public static void main(String[] args) {
        SpringApplication.run(Web1App.class, args);
    }
}

redisNamespace

保存在redis中的數(shù)據(jù)的key前綴。默認(rèn)spring:session。

maxInactiveIntervalInSeconds

會(huì)話生命周期。默認(rèn)1800秒。

flushMode

刷新redis數(shù)據(jù)的模式。默認(rèn)ON_SAvE。在保存時(shí)才刷新。另一個(gè)取值FlushMode.IMMEDIATE,不刷新。

saveMode

保存模式。默認(rèn)值SaveMode.ON_SET_ATTRIBUTE:在設(shè)置session屬性時(shí)保存??蛇x值如下:

  1. SaveMode.ALWAYS:實(shí)時(shí)保存。
  2. SaveMode.ON_GET_ATTRIBUTE:獲取值時(shí)才進(jìn)行保存到Redis。

cleanupCron

清除Redis中數(shù)據(jù)的表達(dá)式。默認(rèn)”0 * * * * *

Spring Session保存在Redis中的數(shù)據(jù)

spring:session:sessions:唯一值

value的類(lèi)型是Hash類(lèi)型。表示整個(gè)Session對(duì)象。包括:

  1. creationTime :創(chuàng)建會(huì)話的時(shí)間
  2. lastAccessedTime :最后一次訪問(wèn)時(shí)間
  3. maxInactiveInterval :有效生命周期,默認(rèn)30分鐘
  4. sessionAttr:xxx :會(huì)話中的attribute值。field中的xxx代表會(huì)話中attribute的名字,會(huì)話中每個(gè)attribute,對(duì)應(yīng)一個(gè)field-value對(duì)。

 spring:session:sessions:expires:唯一值

value的類(lèi)型是String類(lèi)型。沒(méi)有什么特殊內(nèi)容。表示當(dāng)前session過(guò)期狀態(tài)。如果沒(méi)有該屬性說(shuō)明,當(dāng)前Session已過(guò)期。

spring:session:erxpirations:時(shí)間戳

value的類(lèi)型是Set類(lèi)型。里面存儲(chǔ)了這個(gè)時(shí)間戳是哪個(gè)session的。如果過(guò)期了,該鍵值對(duì)也會(huì)被刪除掉。

基于Header的Spring Session或改變Cookie名稱

修改Cookie名稱

添加配置類(lèi)修改Spring Session 中的Cookie名稱。

@Configuration
public class MyConfiguration {
    @Bean
    public HttpSessionIdResolver httpSessionIdResolver(){
        // 創(chuàng)建cookie轉(zhuǎn)換器
        CookieHttpSessionIdResolver httpSessionIdResolver = new CookieHttpSessionIdResolver();
 
        // 設(shè)置Cookie序列化方案
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        // 設(shè)置Cookie的名字
        cookieSerializer.setCookieName("BJSXT");
 
        httpSessionIdResolver.setCookieSerializer(cookieSerializer);
 
        return httpSessionIdResolver;
    }
}

設(shè)置Header

添加配置類(lèi)修改Spring Session 是基于Header指定名稱請(qǐng)求頭,代替Cookie。

@Configuration
public class MyConfiguration {
    @Bean
    public HttpSessionIdResolver httpSessionIdResolver(){
        HttpSessionIdResolver httpSessionIdResolver = new HeaderHttpSessionIdResolver("MY-SESSION");
        return httpSessionIdResolver;
    }
}

到此這篇關(guān)于Spring Session(分布式Session共享)實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Spring Session(分布式Session共享)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java字符串反轉(zhuǎn)示例分享

    java字符串反轉(zhuǎn)示例分享

    這篇文章主要介紹了將一個(gè)字符串進(jìn)行反轉(zhuǎn)或者字符串中指定部分進(jìn)行反轉(zhuǎn)的方法,大家參考使用吧
    2014-01-01
  • 基于solr全文檢索實(shí)現(xiàn)原理(詳談)

    基于solr全文檢索實(shí)現(xiàn)原理(詳談)

    下面小編就為大家分享一篇基于solr全文檢索實(shí)現(xiàn)原理詳談,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    這篇文章主要介紹了SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringCloud Hystrix的使用

    SpringCloud Hystrix的使用

    這篇文章主要介紹了SpringCloud Hystrix的使用,幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • 最新評(píng)論

    宾阳县| 通河县| 房产| 阳泉市| 黄浦区| 泗洪县| 塔城市| 阿拉善右旗| 南投市| 千阳县| 宾川县| 措美县| 合江县| 措美县| 韶山市| 安福县| 化德县| 仁化县| 中山市| 滦平县| 泸西县| 休宁县| 昭通市| 桐乡市| 天柱县| 丰镇市| 平舆县| 鹿泉市| 乌拉特中旗| 筠连县| 阳东县| 贵德县| 乌苏市| 门头沟区| 沛县| 漯河市| 汝南县| 桂平市| 蓬溪县| 思南县| 莱芜市|