# 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();
}
}
```