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

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

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

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

    <!-- 設(shè)置Cookie domain 和 名稱 -->
    <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;
	}

可以看出,如果沒有指定默認(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)文章

  • Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例

    Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例

    這篇文章主要介紹了Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java中的Lombok使用詳解

    Java中的Lombok使用詳解

    這篇文章主要介紹了Java中的Lombok使用詳解,Lombok是一個(gè)在Java開發(fā)過程中使用注解的方式,用于簡化JavaBean的編寫,避免冗余和樣板式代碼的插入,使類的編寫更加簡潔,需要的朋友可以參考下
    2023-08-08
  • Spring @Value注解失效問題解決方案

    Spring @Value注解失效問題解決方案

    這篇文章主要介紹了Spring @Value注解失效問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解

    Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解

    這篇文章主要為大家詳細(xì)介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-10-10
  • SpringBoot中@FeignClient 注解的作用

    SpringBoot中@FeignClient 注解的作用

    Feign可以幫助我們定義和實(shí)現(xiàn)服務(wù)之間的 RESTful 接口,使得服務(wù)之間的調(diào)用更加方便和可靠,本文主要介紹了SpringBoot中@FeignClient 注解的作用,感興趣的可以了解一下
    2024-06-06
  • java遞歸實(shí)現(xiàn)漢諾塔步驟介紹

    java遞歸實(shí)現(xiàn)漢諾塔步驟介紹

    大家好,本篇文章主要講的是java遞歸實(shí)現(xiàn)漢諾塔步驟介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java最常用的6個(gè)簡單的計(jì)算題

    Java最常用的6個(gè)簡單的計(jì)算題

    本篇文章給大家整理的在JAVA中最常用到的簡單的計(jì)算題,對(duì)此有興趣的朋友可以測(cè)試參考下。
    2018-02-02
  • java五子棋小游戲?qū)崿F(xiàn)代碼

    java五子棋小游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java五子棋實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Springboot實(shí)現(xiàn)發(fā)送郵件

    Springboot實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    下面小編就為大家?guī)硪黄斦刯ava線程與線程、進(jìn)程與進(jìn)程間通信。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論

昭苏县| 凤台县| 浮梁县| 灌阳县| 台中市| 莱芜市| 灯塔市| 益阳市| 日土县| 新郑市| 昌都县| 梅河口市| 沾化县| 黑龙江省| 中方县| 巫溪县| 石嘴山市| 湖北省| 丹寨县| 滦南县| 涞水县| 盖州市| 苗栗市| 陆川县| 青州市| 双牌县| 宁波市| 黄梅县| 离岛区| 永登县| 大兴区| 钦州市| 红桥区| 阳谷县| 吴旗县| 耒阳市| 长兴县| 长阳| 清镇市| 崇明县| 三原县|