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

一、引入aop依赖


    org.springframework.boot
    spring-boot-starter-aop

二、编写一个工具类TokenUtil

1、通过用户生成token

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

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

public class TokenUtil {
    /**
     * 创建一个map  用于存储所有的令牌
     *
     *      token  -  User
     */
    private static Map 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中注入上面类并编写拦截规则

AOP实现RBAC的角色访问权限验证_第1张图片

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

四、数据库只需要用户id

 AOP实现RBAC的角色访问权限验证_第2张图片

通过后就会查到信息

AOP实现RBAC的角色访问权限验证_第3张图片

注:

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

 

你可能感兴趣的:(Java基础,java,aop,RBAC)