# SpringBoot_RBAC **Repository Path**: acherat/SpringBoot_RBAC ## Basic Information - **Project Name**: SpringBoot_RBAC - **Description**: 基于spring aop结合jwt实现的轻量级权限验证。在controller的方法上使用@RequiresPermissions,@RequiresRoles,@TokenCheck 注解实现用户权限验证。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-12-02 - **Last Updated**: 2021-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot_RBAC #### 介绍 基于spring aop结合jwt实现的轻量级权限验证。在controller的方法上使用@RequiresPermissions,@RequiresRoles,@TokenCheck 注解实现用户权限验证。 #### 使用说明 1. 在需要权限验证的spring项目中引入依赖 2. 使用注解 3. 实现RoleAndPermissionCallback 接口 加载用户的实际权限和角色 #### 注解说明 ##### @TokenCheck 检查请求头token 的合法性,不存在则抛出异常 ##### @RequiresRoles 检查用户是否具备相关的角色 有 AND 和 OR ##### @RequiresPermissions 检查用户是否具备相关的角色 有 AND 和 OR,如果在方法上同时使用@RequiresRoles和@RequiresPermissions
优先验证 RequiresRoles ,验证合法后进入业务方法。 #### 引入依赖 ```xml com.platform Platform-RBAC 1.0.0 ``` #### 加载用户权限 ```java package com.platform.rbac.example.service; import com.platform.rbac.callback.RoleAndPermissionCallback; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Component public class UserPermissionImpl implements RoleAndPermissionCallback { /** * 根据用户名获取用户相应的权限 * 每次HTTP请求都会执行此方法 * 实现者可以在这里接入缓存 * * @param username * @return */ @Override public List loadPerms(String username) { List userPermission=new ArrayList<>(); //模拟用户的权限 实际上需要从数据库查询 userPermission.add("user:add"); userPermission.add("user:update"); userPermission.add("user:delete"); return userPermission; } /** * 根据用户名获取用户相应的角色 * 每次HTTP请求都会执行此方法 * 实现者可以在这里接入缓存 * * @param usrename * @return */ @Override public List loadRoles(String usrename) { List userRoles=new ArrayList<>(); //模拟用户的角色 实际上需要从数据库查询 userRoles.add("user"); return userRoles; } } ```` #### 注解使用 ```java package com.platform.rbac.example.controller; import com.alibaba.fastjson.JSONObject; import com.platform.rbac.annotation.RequiresPermissions; import com.platform.rbac.annotation.RequiresRoles; import com.platform.rbac.annotation.TokenCheck; import com.platform.rbac.callback.RoleAndPermissionCallback; import com.platform.rbac.jwt.JWTUtil; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ExampleController { /** * 用户登录 * 登录成功后 为 admin 创建token * 不需要任何注解 无需拦截 * @return */ @PostMapping("login") public String login(){ JSONObject data=new JSONObject(); data.put("code",200); data.put("msg","login success"); data.put("data", JWTUtil.createToken("admin")); return data.toJSONString(); } /** * 获取用户信息 * 需要验证 请求头的token是否有效 * @return */ @TokenCheck @GetMapping("info") public String info(){ JSONObject data=new JSONObject(); data.put("code",200); data.put("msg",""); data.put("data", "return use info"); return data.toJSONString(); } /** * 权限验证 * 删除用户 需要 user:delete 权限 * @return */ @RequiresPermissions(value = "user:delete") @PostMapping("delete") public String delete(){ JSONObject data=new JSONObject(); data.put("code",200); data.put("msg","delete success"); return data.toJSONString(); } /** * 角色验证 * 新增用户 需要 user 角色 * @return */ @RequiresRoles(value = "user") @PostMapping("add") public String add(){ JSONObject data=new JSONObject(); data.put("code",200); data.put("msg","add success"); return data.toJSONString(); } } ```