AOP实现RBAC的角色访问权限验证

一、引入aop依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

二、编写一个工具类TokenUtil

1、通过用户生成token

2、通过token验证用户是否登录

3、通过token获取用户实体类

public class TokenUtil {
    /**
     * 创建一个map  用于存储所有的令牌
     *
     *      token  -  User
     */
    private static Map<String, User> tokenMap = new HashMap<>();
    /**
     *  生成token,存储token-user的对应关系
     *  返回token令牌
     * @param user
     * @return
     */
    public static String generateToken(User user){
        // 生成唯一不重复的字符串
        String token = UUID.randomUUID().toString();
        tokenMap.put(token,user);
        return token;
    }
    /**
     *  验证token是否合法
     * @param token
     * @return
     */
    public static boolean verify(String token){
        return tokenMap.containsKey(token);
    }
    /**
     *  根据token获取用户信息
     * @param token
     * @return
     */
     public static User getUser(String token){
         return tokenMap.get(token);
     }
    public static void main(String[] args) {
        for (int i=0; i<20; i++){
            System.out.println(UUID.randomUUID().toString());
        }
    }
}

三、建立一个拦截业务逻辑类AuthInterceptor

public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("AuthInterceptor preHandle....");
        String uri = request.getRequestURI();
        System.out.println("当前路径:"+uri);
        /**
         * HandlerMethod=>Controller中标注@RequestMapping的方法
         *  需要配置静态资源不拦截时,添加这块逻辑  => 前后端分离项目
         *
         */
        // 是我们的conrtoller中的方法
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        String token = request.getHeader(GlobalConstant.HEADER_TOKEN);
        User user = TokenUtil.getUser(token);
        // 一定是登陆验证成功的
       if(!user.getMenuUrlList().contains(uri)){
           throw  new RuntimeException("403 Forbidden!");
       }
        return true;
    }
}

在WebMvcConfig中注入上面类并编写拦截规则

如果用户有这个角色有这个访问权限才可以通行

四、数据库只需要用户id

 

通过后就会查到信息

注:

项目代码的gitee地址https://gitee.com/hbuws/jwlb.git

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我老伯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值