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

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

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

一、配置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è)置 -->
		<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時,指定的默認(rèn)序列化是:StringRedisSerializer,當(dāng) defaultRedisSerializer != null 時,重新指定了序列化方法。defaultRedisSerializer 的初始化代碼如下:

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

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

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

注:使用JSON序列化,在特定的場景,會報錯,謹(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中存在舊有的序列化值,更換序列化方法后,要刪除舊值,使用新的序列化進(jìn)行調(diào)試,否則會報序列化錯誤。

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

到此這篇關(guān)于Spring session redis 修改默認(rèn)的序列化方法的文章就介紹到這了,更多相關(guān)Spring session redis 修改序列化內(nèi)容請搜索腳本之家以前的文章或繼續(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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java中的Lombok使用詳解

    Java中的Lombok使用詳解

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

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

    這篇文章主要介紹了Spring @Value注解失效問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    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é)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java最常用的6個簡單的計(jì)算題

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

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

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

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

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

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

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

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

最新評論

吴川市| 巢湖市| 扎赉特旗| 五家渠市| 游戏| 浦东新区| 东阳市| 临沂市| 莱芜市| 宜昌市| 柘城县| 上犹县| 宁波市| 南阳市| 临江市| 河津市| 贵德县| 福海县| 湾仔区| 达日县| 越西县| 安仁县| 阿荣旗| 宜川县| 宁乡县| 泽州县| 海口市| 阳城县| 黔西县| 庆安县| 正安县| 鄂托克前旗| 宿迁市| 若尔盖县| 宁波市| 桓仁| 大余县| 祥云县| 清流县| 丰顺县| 大同县|