[后端开发]二Session共享实现

Session共享

  • Blog项目采用的是Shiro+Redis实现Session共享
  • 因为Shiro中本身就提供了sessionManager和sessionDAO,我们可以把shiro和redis集成起来,把session缓存到Redis中,然后需要使用的时候从Redis中获取对应的session

Session共享思路

会话共享的实现思路其实就是
1.配置Redis连接信息并在启动类上开启缓存
2.自定义Redis的配置类RedisConfig继承CachingConfigurerSupport拿到RedisTemplate并能序列化
3.自定义RedisSessionDao类实现AbstractSessionDAO重写方法实现RedisTemplate对Session的操作,同时用来构造sessionManager会话管理器websessionMananger
4.自定义RedisCacheManager实现CacheManager接口作为CacheManager缓存管理器(作用是拿到Cache)
5.由(自定义)Realm,会话管理器,缓存管理器构建安全管理器securityManager实例

最重要的就是4.5两步骤,构建缓存管理器实例再构建会话管理器实例,再将Realm和两个管理器一起构建安全管理器实例,配置完成后登录,可以再Redis看到对应的Key证明缓存已经交给Redis

集成Redis

集成单机版的Redis(后续可扩展成为集群)

配置application.properties

#cache指定缓存类型
	spring.cache.type=REDIS
	
	#data-redis
	spring.redis.database=15
	spring.redis.host=192.168.**.**
	spring.redis.password=
	spring.redis.port=6379
	spring.redis.timeout=2000
	spring.redis.jedis.pool.max-active=8 
	spring.redis.jedis.pool.max-idle=8 
	spring.redis.jedis.pool.max-wait=-1 
	spring.redis.jedis.pool.min-idle=0 
	#spring.redis.sentinel.master=mymaster
	#spring.redis.sentinel.nodes=192.168.210.**\:26379
	redis.proxyIpDBNum=15
	
	#设置的session和授权等信息的过期时间
	#session share   unit hours(设置成分钟方便测试)
	session.timeout=3
	#cacheTimeOut unit hours
	cache.timeout=12

Application开启缓存

@SpringBootApplication
	@EnableCaching //开启缓存
	public class OneserviceManagerApplication {
	    public static void main(String[] args) {
	        SpringApplication.run(OneserviceManagerApplication.class, args);
	    }
	}

编写RedisConfig.java配置类

  • RedisConfig是自定义的Redis配置类继承CachingConfigurerSupport,

  • 该类的主要作用就是拿到 RedisTemplate处理Redis数据并进行最佳序列化

      package com.ch.oneservice.manager.config.redis;
      		 
      		import org.springframework.beans.factory.annotation.Autowired;
      		import org.springframework.cache.annotation.CachingConfigurerSupport;
      		import org.springframework.context.annotation.Bean;
      		import org.springframework.context.annotation.Configuration;
      		import org.springframework.data.redis.connection.RedisConnectionFactory;
      		import org.springframework.data.redis.core.RedisTemplate;
      		import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
      		import org.springframework.data.redis.serializer.StringRedisSerializer;
      		 
      		@Configuration
      		public class RedisConfig extends CachingConfigurerSupport {
      		 
      		    @Autowired
      		    private RedisConnectionFactory redisConnectionFactory;
      		 
      		    /**
      		     * 获取RedisTemplate对象,处理Redis数据,并且进行最佳序列化
      		     * @return
      		     */
      		    @Bean(name="redisTemplate")
      		    public RedisTemplate<String, Object> redisTemplate() {
      		        RedisTemplate<String, Object> template = new RedisTemplate<>();
      		        //手动序列化
      		        JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
      		        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
      		        template.setKeySerializer(stringRedisSerializer);
      		        template.setValueSerializer(jdkSerializationRedisSerializer);
      		        template.setHashKeySerializer(stringRedisSerializer);
      		        template.setHashValueSerializer(jdkSerializationRedisSerializer);
      		        //连接Redis
      		        //jedisConnectionFactory.setDatabase(6);
      		        template.setConnectionFactory(redisConnectionFactory);
      		        template.afterPropertiesSet();
      		        return template;
      		    } 
      		}
    

Redis实现shiro的session共享

RedisSessionDao的自定义实现

(session的缓存处理)

-自定义 RedisSessionDao继承AbstractSessionDAO,重写对Session操作的API实现Redis对Session的操作,包括存储删除创建Session

	package com.ch.evaluation.auth.shiro.cas;
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值