SpringBoot 整合Shiro 集成Redis緩存


簡介:由於考慮到項目后期分布式部署,所以緩存由ehcache改為redis,而redis既有單機版部署,也有分布式部署,所以二者需要兼容。

1. maven依賴

<dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>3.1.0</version>
</dependency>

2. 設置緩存管理器,此處開啟授權緩存,並加入securityManager中

  @Value("${spring.redis.cluster.nodes:}")
    private String nodes;

    @Value("${spring.redis.host:}")
    private String host;

    @Value("${spring.redis.port:6379}")
    private int port;

  /** * redis集群管理器 * * @return redisClusterManager */ @Bean public RedisClusterManager redisClusterManager() { RedisClusterManager redisClusterManager = new RedisClusterManager(); redisClusterManager.setHost(this.nodes); return redisClusterManager; } /** * redis管理器 * * @return redisManager */ @Bean public RedisManager redisManager() { RedisManager redisManager = new RedisManager(); redisManager.setHost(this.host); redisManager.setPort(this.port); return redisManager; } /** * redis緩存管理器 * * @param redisClusterManager redis集群管理器 * @param redisManager redis管理器 * @return cacheManager */ @Bean public RedisCacheManager redisCacheManager(RedisClusterManager redisClusterManager, RedisManager redisManager) { RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(StrUtil.isNotBlank(this.nodes) ? redisClusterManager : redisManager); // 針對不同的用戶緩存,由於principal是ShiroUser,所以需是里面的字段 redisCacheManager.setPrincipalIdFieldName("id"); redisCacheManager.setExpire((int) CommonConstant.PERMISSION_TIME); return redisCacheManager; } /** * token認證和授權驗證器 * * @param redisCacheManager 緩存管理器 * @return jwtRealm */ @Bean public JwtRealm jwtRealm(RedisCacheManager redisCacheManager) { JwtRealm jwtRealm = new JwtRealm(); jwtRealm.setCredentialsMatcher(new JwtCredentialsMatcher()); // 啟用授權緩存 jwtRealm.setAuthorizationCachingEnabled(true); jwtRealm.setAuthorizationCacheName(RedisConstant.AUTHORIZATION_CACHE); jwtRealm.setCacheManager(redisCacheManager); return jwtRealm; }

3. JwtRealm類集令牌token認證和授權認證,考慮到用戶的權限會更改,所以在更改權限時需要清除授權緩存

  注意點:本處代碼沒有調用shiro自帶的清除緩存方法,是由於項目引入的jedis是3.1版本,而shiro-redis里用的jedis是低版本不兼容,所以直接調用后會報錯,故需要自己實現清除。

4. 常見錯誤見:SpringBoot整合Shiro 集成Ehcache緩存(四)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM