亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

HttpSession的實現(xiàn)流程

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

如果沒有攜帶,服務(wù)器端會創(chuàng)建一個Cookie,key為JSESSIONID,value是長字符串(唯一字符串)。

同時會實例化一個Session對象。把Session對象放入到全局Map中,Map的key是Cookie的value,Map的value就是Session對象。

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

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

3.客戶端再次請求服務(wù)器端時會自動攜帶Cookie內(nèi)容。

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

如果沒有失效修改lastAccessedTime為當(dāng)前訪問時間。

Tomcat中的HttpSession實現(xiàn)

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

既然HttpSession存儲值時是一個全局Map,所以依然可以使用Redis這種鍵值對NoSQL數(shù)據(jù)庫來替代這個Map,也就是存自定義實現(xiàn)時用Redis存儲以前放在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

編輯啟動類

/**
 * EnableRedisHttpSession - 讓Spring Session分布式會話共享技術(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 + " '到會話變量作用域";
    }
    @RequestMapping("/get")
    public String demo(HttpSession session, String attName){
        Object attValue = session.getAttribute(attName);
        System.out.println("從會話中獲取" + attName + "變量,值是:" + attValue);
        return "WEB1工程:從會話中獲取" + 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

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

flushMode

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

saveMode

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

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

cleanupCron

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

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

spring:session:sessions:唯一值

value的類型是Hash類型。表示整個Session對象。包括:

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

 spring:session:sessions:expires:唯一值

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

spring:session:erxpirations:時間戳

value的類型是Set類型。里面存儲了這個時間戳是哪個session的。如果過期了,該鍵值對也會被刪除掉。

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

修改Cookie名稱

添加配置類修改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

添加配置類修改Spring Session 是基于Header指定名稱請求頭,代替Cookie。

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

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

相關(guān)文章

  • JAVA代碼設(shè)置selector不同狀態(tài)下的背景顏色

    JAVA代碼設(shè)置selector不同狀態(tài)下的背景顏色

    這篇文章主要介紹了JAVA代碼設(shè)置selector不同狀態(tài)下的背景顏色,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • 淺談Java編程中的synthetic關(guān)鍵字

    淺談Java編程中的synthetic關(guān)鍵字

    這篇文章主要介紹了淺談Java編程中的synthetic關(guān)鍵字的相關(guān)內(nèi)容,包括其簡單的介紹和實例,需要的朋友可以了解下。
    2017-09-09
  • 深度deepin安裝以及jdk、tomcat、Nginx安裝教程

    深度deepin安裝以及jdk、tomcat、Nginx安裝教程

    這篇文章主要給大家介紹了關(guān)于深度deepin安裝以及jdk、tomcat、Nginx安裝的相關(guān)資料,按照文中介紹的方法可以輕松的實現(xiàn)安裝,對大家的工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • mybatis中${}和#{}取值的區(qū)別分析

    mybatis中${}和#{}取值的區(qū)別分析

    mybatis中使用sqlMap進(jìn)行sql查詢時,經(jīng)常需要動態(tài)傳遞參數(shù),在動態(tài)SQL解析階段, #{ } 和 ${ } 會有不同的表現(xiàn),這篇文章主要給大家介紹了關(guān)于mybatis中${}和#{}取值區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • java獲取json中的全部鍵值對實例

    java獲取json中的全部鍵值對實例

    下面小編就為大家分享一篇java獲取json中的全部鍵值對實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java基于Swing實現(xiàn)的打獵射擊游戲代碼

    Java基于Swing實現(xiàn)的打獵射擊游戲代碼

    這篇文章主要介紹了Java基于Swing實現(xiàn)的打獵射擊游戲代碼,包含完整的游戲事件處理與邏輯流程控制,具有不錯的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • springboot 高版本后繼續(xù)使用log4j的完美解決方法

    springboot 高版本后繼續(xù)使用log4j的完美解決方法

    這篇文章主要介紹了 springboot 高版本后繼續(xù)使用log4j的解決方法,需要的朋友可以參考下
    2017-12-12
  • Java編程代碼性能優(yōu)化

    Java編程代碼性能優(yōu)化

    本文介紹了 Java 代碼優(yōu)化的過程,總結(jié)了優(yōu)化 Java 程序的一些最佳實踐,分析了進(jìn)行優(yōu)化的方法,并解釋了性能提升的原因,需要的朋友可以參考下
    2015-11-11
  • Maven發(fā)布項目 (jar包) 到Nexus私服中的操作

    Maven發(fā)布項目 (jar包) 到Nexus私服中的操作

    這篇文章主要介紹了Maven發(fā)布項目 (jar包) 到Nexus私服中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 學(xué)習(xí)Java之自定義異常與NullPointerException的處理

    學(xué)習(xí)Java之自定義異常與NullPointerException的處理

    有時候Java自身提供的異常類并不能很好地表達(dá)我們的需求,所以這時候我們就可以自定義異常,也就是說,我們可以制造出一個自己的異常類,這樣就可以拋出或捕獲自己的異常了,本文就給大家詳細(xì)講講Java自定義異常與NullPointerException的處理
    2023-08-08

最新評論