shiro-redis集成lettuce(支持集群、哨兵、单机)

发现类库shiro-redis版本没人维护,并且还是使用的jedis,想自己集成一下lettuce,现已发布到github上面,可以引入到项目当中
项目地址

1.修改Maven settings.xml

  <mirrors>
	<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*,!jitpack.io</mirrorOf>
      <name>Nexus aliyun</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  </mirrors>

2.导入pom.xml

注意:jedis请使用4.XX版本

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://www.jitpack.io</url>
        </repository>
    </repositories>

	<dependencies>
		<dependency>
            <groupId>com.github.TsukasaHwan</groupId>
            <artifactId>shiro-redis</artifactId>
            <version>3.4.1</version>
        </dependency>
	</dependencies>

3.与Spring-Boot集成

    private final RedisProperties redisProperties;
    
    /**
     * 单机配置
     *
     * @return
     */
    @Bean
    public LettuceRedisManager lettuceRedisManager() {
        LettuceRedisManager lettuceRedisManager = new LettuceRedisManager();
        String password = redisProperties.getPassword();
        if (StringUtils.isNotBlank(password)) {
            lettuceRedisManager.setPassword(password);
        }
        lettuceRedisManager.setHost(redisProperties.getHost());
        lettuceRedisManager.setPort(redisProperties.getPort());
        lettuceRedisManager.setTimeout(redisProperties.getTimeout());
        lettuceRedisManager.setDatabase(redisProperties.getDatabase());
        // 可选项是否开启异步,默认不开启
        // lettuceRedisClusterManager.setIsAsync();
        // 客户端选项
        // lettuceRedisSentinelManager.setClientOptions();
        // 连接池配置
        // lettuceRedisSentinelManager.setGenericObjectPoolConfig();
        return lettuceRedisManager;
    }

    /**
     * 集群配置
     *
     * @return
     */
    @Bean
    public LettuceRedisClusterManager lettuceRedisClusterManager() {
        LettuceRedisClusterManager lettuceRedisClusterManager = new LettuceRedisClusterManager();
        lettuceRedisClusterManager.setPassword(redisProperties.getPassword());
        lettuceRedisClusterManager.setDatabase(redisProperties.getDatabase());
        lettuceRedisClusterManager.setNodes(redisProperties.getCluster().getNodes());
        // 可选项是否开启异步,默认不开启
        // lettuceRedisClusterManager.setIsAsync();
        // 客户端选项
        // lettuceRedisClusterManager.setClusterClientOptions();
        // 连接池配置
        // lettuceRedisSentinelManager.setGenericObjectPoolConfig();
        return lettuceRedisClusterManager;
    }

    /**
     * 哨兵模式
     *
     * @return
     */
    @Bean
    public LettuceRedisSentinelManager lettuceRedisSentinelManager() {
        LettuceRedisSentinelManager lettuceRedisSentinelManager = new LettuceRedisSentinelManager();
        lettuceRedisSentinelManager.setPassword(redisProperties.getPassword());
        lettuceRedisSentinelManager.setDatabase(redisProperties.getDatabase());
        lettuceRedisSentinelManager.setMasterName(redisProperties.getSentinel().getMaster());
        lettuceRedisSentinelManager.setNodes(redisProperties.getSentinel().getNodes());
        lettuceRedisSentinelManager.setSentinelPassword(redisProperties.getSentinel().getPassword());
        // 读取模式
        lettuceRedisSentinelManager.setReadFrom(ReadFrom.REPLICA_PREFERRED);
        // 可选项是否开启异步,默认不开启
        // lettuceRedisClusterManager.setIsAsync();
        // 客户端选项
        // lettuceRedisSentinelManager.setClientOptions();
        // 连接池配置
        // lettuceRedisSentinelManager.setGenericObjectPoolConfig();
        return lettuceRedisSentinelManager;
    }

    /**
     * 使用Redis实现 shiro sessionDao
     *
     * @return
     */
    @Bean
    public RedisSessionDAO redisSessionDAO(LettuceRedisManager lettuceRedisManager) {
        RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
        redisSessionDAO.setRedisManager(lettuceRedisManager);
        return redisSessionDAO;
    }

    /**
     * redis实现缓存
     *
     * @return
     */
    @Bean
    public RedisCacheManager redisCacheManager(LettuceRedisManager lettuceRedisManager) {
        RedisCacheManager redisCacheManager = new RedisCacheManager();
        redisCacheManager.setRedisManager(lettuceRedisManager);
        return redisCacheManager;
    }

spring-boot-starter

项目地址
注意:需要单独引入jedis或lettuce类库。如若使用spring-boot则无需引入lettuce类库,默认使用lettuce,否则需要引入其中一个类库

        <dependency>
            <groupId>com.github.TsukasaHwan</groupId>
            <artifactId>shiro-redis-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>

1. application.yml
单机配置:

shiro:
  redis:
  	#客户端类型(jedis,lettuce)
    client-type: lettuce
    #redis地址
    host: ${spring.redis.host}
    #redis password 没有可不配置
    password: ${spring.redis.password}
    #redis db
    database: ${spring.redis.database}
    #redis port
    port: ${spring.redis.port}
    #连接超时时间
    timeout: ${spring.redis.timeout}
    #session redis key前缀 可不配置
    session:
      key-prefix: ''
    cache:
      #cache redis key前缀 可不配置
      key-prefix: ''
      # 主体id字段名称 默认为id 可不配置
      principal-id-field-name: 'id'
      # 缓存过期时间单位秒,默认1800秒 可不配置
      expire: 1800s
    lettuce:
      #lettuce是否异步 默认false
      async: false
shiro-redis-spring-boot-starter是一个用于集成Apache ShiroRedisSpring Boot Starter项目。Apache Shiro是一个强大而灵活的Java安全框架,用于身份验证、授权和会话管理等安全功能。而Redis是一个高性能的内存数据库,其具有快速的数据存取能力和持久化支持shiro-redis-spring-boot-starter提供了一种简化和快速集成ShiroRedis的方式,使得在Spring Boot应用中实现安全功能变得更加容易。通过使用该Starter,我们可以方便地将Shiro的会话管理功能存储到Redis中,从而支持分布式环境下的会话共享和管理。 使用shiro-redis-spring-boot-starter可以带来以下好处: 1. 分布式环境的会话共享:通过将Shiro的会话数据存储到Redis中,不同的应用节点可以共享同一个会话,从而实现分布式环境下的会话管理和跨节点的身份验证和授权。 2. 高可用性和性能:Redis作为一个高性能的内存数据库,具有出色的数据读写能力和持久化支持,可以提供可靠的会话存储和高性能的数据访问能力。 3. 简化配置集成shiro-redis-spring-boot-starter提供了封装好的配置集成方式,减少了我们自己实现集成的复杂性和工作量。 总结来说,shiro-redis-spring-boot-starter为我们提供了一种简化和快速集成ShiroRedis的方式,使得在Spring Boot应用中实现安全功能变得更加容易和高效。通过它,我们可以实现分布式环境下的会话共享和管理,提供高可用性和性能的数据存取能力,同时简化了配置集成的复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值