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

Spring?session?redis?修改默認(rèn)的序列化方法(案例)

 更新時(shí)間:2023年04月07日 09:29:03   作者:bo_hai  
這篇文章主要介紹了Spring?session?redis?修改默認(rèn)的序列化方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、配置Spring-session-redis 的關(guān)鍵配置如下:

    <!-- 設(shè)置Cookie domain 和 名稱(chēng) -->
    <bean id="defaultCookieSerializer" class="org.springframework.session.web.http.DefaultCookieSerializer">
        <property name="domainName" value="${sso.cookie.domain}"/>
        <property name="cookieName" value="${sso.cookie.name}"/>
        <property name="cookieMaxAge" value="${sso.cookie.maxage}" />
        <property name="cookiePath" value="${sso.cookie.path}" />
        <!--<property name="domainNamePattern" value="^.+?\\.(\\w+\\.[a-z]+)$"/>-->
    </bean>

	<!-- 配置spring session -->
	<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
		<!-- session超時(shí)設(shè)置 -->
		<property name="maxInactiveIntervalInSeconds" value="${spring.session.expiration}" />
        <property name="cookieSerializer" ref="defaultCookieSerializer" />
	</bean>

二、查看 RedisHttpSessionConfiguration 源代碼如下:

	@Bean
	public RedisTemplate<Object, Object> sessionRedisTemplate(
			RedisConnectionFactory connectionFactory) {
		RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
		template.setKeySerializer(new StringRedisSerializer());
		template.setHashKeySerializer(new StringRedisSerializer());
		if (this.defaultRedisSerializer != null) {
			template.setDefaultSerializer(this.defaultRedisSerializer);
		}
		template.setConnectionFactory(connectionFactory);
		return template;
	}

	@Bean
	public RedisOperationsSessionRepository sessionRepository(
			@Qualifier("sessionRedisTemplate") RedisOperations<Object, Object> sessionRedisTemplate,
			ApplicationEventPublisher applicationEventPublisher) {
		RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(
				sessionRedisTemplate);
		sessionRepository.setApplicationEventPublisher(applicationEventPublisher);
		sessionRepository
				.setDefaultMaxInactiveInterval(this.maxInactiveIntervalInSeconds);
		if (this.defaultRedisSerializer != null) {
			sessionRepository.setDefaultSerializer(this.defaultRedisSerializer);
		}

		String redisNamespace = getRedisNamespace();
		if (StringUtils.hasText(redisNamespace)) {
			sessionRepository.setRedisKeyNamespace(redisNamespace);
		}

		sessionRepository.setRedisFlushMode(this.redisFlushMode);
		return sessionRepository;
	}

創(chuàng)建RedisTemplate時(shí),指定的默認(rèn)序列化是:StringRedisSerializer,當(dāng) defaultRedisSerializer != null 時(shí),重新指定了序列化方法。defaultRedisSerializer 的初始化代碼如下:

	@Autowired(required = false)
	@Qualifier("springSessionDefaultRedisSerializer")
	public void setDefaultRedisSerializer(
			RedisSerializer<Object> defaultRedisSerializer) {
		this.defaultRedisSerializer = defaultRedisSerializer;
	}

因此,我們只需要?jiǎng)?chuàng)建名為 springSessionDefaultRedisSerializer 的Bean,及可修改默認(rèn)序列化方法。

<bean id="springSessionDefaultRedisSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />

注:使用JSON序列化,在特定的場(chǎng)景,會(huì)報(bào)錯(cuò),謹(jǐn)慎使用。

三、RedisTemplate 初始化代碼如下:

	public void afterPropertiesSet() {

		super.afterPropertiesSet();

		boolean defaultUsed = false;

		if (defaultSerializer == null) {

			defaultSerializer = new JdkSerializationRedisSerializer(
					classLoader != null ? classLoader : this.getClass().getClassLoader());
		}

		if (enableDefaultSerializer) {

			if (keySerializer == null) {
				keySerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (valueSerializer == null) {
				valueSerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (hashKeySerializer == null) {
				hashKeySerializer = defaultSerializer;
				defaultUsed = true;
			}
			if (hashValueSerializer == null) {
				hashValueSerializer = defaultSerializer;
				defaultUsed = true;
			}
		}

		if (enableDefaultSerializer && defaultUsed) {
			Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
		}

		if (scriptExecutor == null) {
			this.scriptExecutor = new DefaultScriptExecutor<K>(this);
		}

		initialized = true;
	}

可以看出,如果沒(méi)有指定默認(rèn)值,使用 JdkSerializationRedisSerializer。

特別提醒:如果已有session中存在舊有的序列化值,更換序列化方法后,要?jiǎng)h除舊值,使用新的序列化進(jìn)行調(diào)試,否則會(huì)報(bào)序列化錯(cuò)誤。

特別提醒:如果已有session中存在舊有的序列化值,更換序列化方法后,要?jiǎng)h除舊值,使用新的序列化進(jìn)行調(diào)試,否則會(huì)報(bào)序列化錯(cuò)誤。

到此這篇關(guān)于Spring session redis 修改默認(rèn)的序列化方法的文章就介紹到這了,更多相關(guān)Spring session redis 修改序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中判斷對(duì)象類(lèi)型的3種方法舉例

    java中判斷對(duì)象類(lèi)型的3種方法舉例

    在Java這種強(qiáng)類(lèi)型語(yǔ)言中類(lèi)型轉(zhuǎn)換、類(lèi)型判斷是經(jīng)常遇到的,下面這篇文章主要給大家介紹了關(guān)于java中判斷對(duì)象類(lèi)型的3種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 一文帶你弄清Map集合及其實(shí)現(xiàn)類(lèi)

    一文帶你弄清Map集合及其實(shí)現(xiàn)類(lèi)

    在Java中,Map是一種鍵值對(duì)(Key-Value)的集合,它存儲(chǔ)了一組唯一的鍵與相應(yīng)的值,每個(gè)鍵可以映射到一個(gè)值,這篇文章將詳細(xì)介紹Map集合及其一些常見(jiàn)的實(shí)現(xiàn)類(lèi),適合小白,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索

    JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索

    本文主要介紹了JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 如何在mapper文件中使用in("str1","str2")

    如何在mapper文件中使用in("str1","str2")

    這篇文章主要介紹了如何在mapper文件中使用in("str1","str2"),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • springcloud?整合?openfeign的方法

    springcloud?整合?openfeign的方法

    openFeign 是springcloud對(duì)Feign進(jìn)行了增強(qiáng),使得Feign支持了springmvc的注解,并整合了Ribbon和Eureka,從而讓Feign的使用更加方便,這篇文章主要介紹了springcloud?整合?openfeign,需要的朋友可以參考下
    2022-09-09
  • Java中RSA加密解密的實(shí)現(xiàn)方法分析

    Java中RSA加密解密的實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Java中RSA加密解密的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長(zhǎng)度/密文長(zhǎng)度/明文長(zhǎng)度的參考說(shuō)明,需要的朋友可以參考下
    2017-07-07
  • SpringBoot詳細(xì)分析自動(dòng)裝配原理并實(shí)現(xiàn)starter

    SpringBoot詳細(xì)分析自動(dòng)裝配原理并實(shí)現(xiàn)starter

    相對(duì)于傳統(tǒng)意義上的Spring項(xiàng)目,SpringBoot具有開(kāi)箱即用,簡(jiǎn)化配置,內(nèi)置Tomcat等等等等一系列的特點(diǎn)。在這些特點(diǎn)中,最重要的兩條就是約定優(yōu)于配置和自動(dòng)裝配
    2022-07-07
  • 深入理解JDK8中Stream使用

    深入理解JDK8中Stream使用

    Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過(guò)濾和映射數(shù)據(jù)等操作。這篇文章主要介紹了JDK8中Stream使用解析,需要的朋友可以參考下
    2021-06-06
  • IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法

    IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法

    本文主要介紹了IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法, maven結(jié)構(gòu)的項(xiàng)目,我們?cè)诿看涡薷拇a后都會(huì)需要手動(dòng)編譯,本文就可以解決這個(gè)問(wèn)題,感興趣的可以了解一下
    2023-08-08

最新評(píng)論