Shiro-Redis-Cache - 将查询权限存入Redis

Shiro-Redis-Cache:

 

Cache:负责完成缓存数据的功能

CacheManager:负责管理Cache核心流程,重点是会创建Cache对象.

一、定义Cache组件

package com.vince.cache;

import lombok.Getter;
import lombok.Setter;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Collection;
import java.util.Set;

@Setter
@Getter
public class MyShiroCache implements Cache {

    private String name;  // 权限缓存的标识
    private RedisTemplate template;

    public MyShiroCache(){}

    public MyShiroCache(String name){   // 需 get/set

        this.name=name;   // 在 cacheManager 中会调用此方法
    }

    // cache  主业务

    @Override
    public Object get(Object o) throws CacheException {
        System.out.println("检查缓存权限~");
        Object data = template.opsForValue().get(o.toString());
        if (data!=null){
            System.out.println("权限信息检查 ----命中缓存~");
            return data;
        }else{
            System.out.println("权限信息检查 ----缓存中不存在~");
            return null;
        }

    }

    @Override
    public Object put(Object o, Object o2) throws CacheException {
           template.opsForValue().set(o.toString(), o2);
        return null;
    }

   //  可以移除某个用户的权限信息的缓存,用于 subject.logout();
   //   o =key=用户凭证 ~= 用户名
    @Override
    public Object remove(Object o) throws CacheException {
        System.out.println(o+"的权限信息被清除");
        template.delete(o.toString());
        return null;
    }

    @Override
    public void clear() throws CacheException {

    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public Set keys() {
        return null;
    }

    @Override
    public Collection values() {
        return null;
    }
}

二、定义CacheManager


import lombok.Setter;
import org.apache.shiro.cache.AbstractCacheManager;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.springframework.data.redis.core.RedisTemplate;

@Setter
public class MyCacheManager  extends AbstractCacheManager {

    private RedisTemplate template;  // 需要注入RedisTemplate


    @Override
    protected Cache createCache(String s) throws CacheException {
        System.out.println("标识是:--"+s);
        MyShiroCache cache = new MyShiroCache(s);
        cache.setTemplate(template);
        return cache;
  

三、配置Cache和CacheManager

shiro-spring.xml:j将此文件导入spring工厂







    
  
    
    
        
        
        
         
        
        
        
        
        
        
        
        
    

   
 
    
        
    



    
    
        
        
         
    




    
    
        
        
        
        
            
               
                /user/logout = logout
            
        
    

    
    

redis配置文件:



    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    


    
    
        
        
            
                
                192.168.11.128:9001,192.168.11.128:9005,192.168.11.128:9006
                
                5
            
        
    

    
        
    



    
    
        
        
        

        
        

        
        
    

    
    
    
    

    
    


如上就可将频繁从数据库中查询改为从缓存中查询数据 ,提高查询效率。

 

 

 

 

 

 

你可能感兴趣的:(Shiro-Redis-Cache - 将查询权限存入Redis)