拦截器实现权限验证。Cookie + Redis

如何实现:

将url 独立成一个个权限,存放于数据库中,一个url 就是一个权限,用户可以有多个权限,存放于一个集合中,再缓存与Redis中,利用cookie或Session作为标识获取Redis中的权限集合,拦截器获取当前访问的Url 再与权限集合中的url逐个比较,若相等则放行,不等则拦截。

表结构大致如下:

在这里插入图片描述

具体实现:

登录成功后调用 redisTemplate.opsForList().rightPushAll(key,v)它专门用于缓存list型数据
再用 redisTemplate.opsForList().range(key, 0, -1); 获取。获取第0条开始 -1条结束,
其实就是获取所有。

  • 后台登录成功后 向缓存丢数据。顺带设置标识用Cookie
            String uuid2 = UUID.randomUUID().toString();
            redisTemplate.opsForList().rightPushAll("mengpeng:Jurisdiction:" + mengpengUser.getUserName() + uuid2, listJurisdiction);
            // Session cookie
            request.getSession().setAttribute(mengpengUser.getUserName(), mengpengUser);

            Cookie cookie = new Cookie("HaylionLogin", mengpengUser.getUserName() + uuid2);
            cookie.setPath("/");
  • redis包用的是这个。
import org.springframework.data.redis.core.StringRedisTemplate;

拦截器设置:

String cookie = CookieUtil.getCookie(request, "HaylionLogin"); //自己写的工具类。获取指定名字的Cookie的值。
        String url = request.getRequestURI();
        List listuserJurisdiction = redisTemplate.opsForList().range("mengpeng:Jurisdiction:" + cookie, 0, -1);
        for (int i = 0; i < listuserJurisdiction.size(); i++) {
            // 管理员直接放行。
            if (listuserJurisdiction.get(i).toString().equals("/admin")) {
                return true;
            }
            // 是否拥有权限。
            if (listuserJurisdiction.get(i).toString().equals(url)) {
                return true;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值