Shiro缓存管理

通过缓存管理可使授权和认证在第一次操作之后不再经过数据库,能有效提高运行效率

第一步:创建RedisCacheManager实现CacheManager接口

package com.lmc.cache;

import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.cache.CacheManager;

/**
 * @Author lmc
 * @Description
 * @Date: Create in 20:47 2020/2/2
 */
public class RedisCacheManager implements CacheManager {


    @Override
    public <K, V> Cache<K, V> getCache(String s) throws CacheException {
        return null;
    }
}

第二步:创建RedisCache实现Cache接口

package com.lmc.cache;

import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;

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

/**
 * @Author lmc
 * @Description
 * @Date: Create in 20:48 2020/2/2
 */
public class RedisCache<K, V> implements Cache<K, V> {
    @Override
    public Object get(Object o) throws CacheException {
        return null;
    }

    @Override
    public Object put(Object o, Object o2) throws CacheException {
        return null;
    }

    @Override
    public Object remove(Object o) throws CacheException {
        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;
    }
}

第三步:重写RedisCache方法

package com.lmc.cache;

import com.lmc.util.JedisUtil;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.springframework.stereotype.Component;
import org.springframework.util.SerializationUtils;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.Set;

/**
 * @Author lmc
 * @Description
 * @Date: Create in 20:48 2020/2/2
 */
@Component
public class RedisCache<K, V> implements Cache<K, V> {

    @Resource
    private JedisUtil jedisUtil;
    private final String CACHE_PREFIX = "lmc-cache:";

    private byte[] getKey(K k) {
        if (k instanceof String) {
            return (CACHE_PREFIX + k).getBytes();
        }
        return SerializationUtils.serialize(k);
    }

    @Override
    public Object get(Object o) throws CacheException {
        System.out.println("从Redis中获取权限数据......");
        byte[] value = jedisUtil.get(getKey((K) o));
        if (value != null) {
            return (V) SerializationUtils.deserialize(value);
        }
        return null;
    }

    @Override
    public Object put(Object o, Object o2) throws CacheException {
        byte[] k = getKey((K) o);
        byte[] v = SerializationUtils.serialize(o2);
        jedisUtil.set(k, v);
        jedisUtil.expire(k, 300);
        return v;
    }

    @Override
    public Object remove(Object o) throws CacheException {
        byte[] k = getKey((K) o);
        byte[] v = jedisUtil.get(k);
        jedisUtil.delete(k);
        if (v != null) {
            return SerializationUtils.deserialize(v);
        }
        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;
    }
}

第四步:重写RedisCacheManager的方法

package com.lmc.cache;

import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.cache.CacheManager;

import javax.annotation.Resource;

/**
 * @Author lmc
 * @Description
 * @Date: Create in 20:47 2020/2/2
 */
public class RedisCacheManager implements CacheManager {

    @Resource
    private RedisCache redisCache;

    @Override
    public <K, V> Cache<K, V> getCache(String s) throws CacheException {
        return redisCache;
    }
}

第五步:修改spring.xml

<!--创建SecurityManager对象-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="userRealm" />
        <property name="sessionManager" ref="sessionManager" />
        <property name="cacheManager" ref="cacheManager" />
    </bean>

<bean id="cacheManager" class="com.lmc.cache.RedisCacheManager" />

运行之后,先是通过Redis查询授权信息,没有的话再通过数据库访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值