SimpleAuth-轻量级的权限校验
特性
这是一款基于SpringBoot的轻量化的权限校验插件。适用于渐进式或轻量级的项目。
项目github地址
用法
当你想要控制Controller中所有的方法或其中一个,可以添加@IsAuthor
注解在方法或Controller类上。
第一步:添加maven依赖
<dependency>
<groupId>io.github.liuye744</groupId>
<artifactId>simpleAuth-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
第二步:验证权限
方式一、通过HttpServlertRequest对象验证参数
创建一个类继承AutoAuthHandler,并重写IsAuthor方法
//验证请求参数中是否携带key为114514的参数.
//返回true则表示验证成功,返回false表示验证失败将会抛出PermissionsException
//当然你也可以进行更复杂的操作
@Component
public class KeyAutoAuthHandler extends AutoAuthHandler {
@Override
public boolean isAuthor(HttpServletRequest request, String permission) {
final String key = request.getParameter("key");
if ("114514".equals(key)){
return true;
}
return false;
}
}
然后将@IsAuthor
注释添加到 Controller 或其中的方法。然后,将检查 Controller 中的所有请求或带注释的请求是否具有相关权限。
@Controller
@IsAuthor(authentication = KeyAutoAuthHandler.class)
public class MyController {
}
注意: 如果你有多个 AutoAuthHandler
,你可以像这样写注释@IsAuth (authentication = { KeyAutoAuthHandler1.class,KeyAutoAuthHandler2.class })
。authentication参数也可以写 Bean 名称。这些类将按顺序执行权限检查。或者创建 继承AutoAuthHandlerChain
的类,并将所有 Handler 添加到该类中。
@Component
public class MyHandlerChain extends AutoAuthHandlerChain {
@Override
public void addChain() {
addLast(KeyAutoAuthHandler1.class);
addLast(KeyAutoAuthHandler2.class);
addLast(KeyAutoAuthHandler3.class);
}
}
//添加注解时使用 @isAuthor(authentications = MyHandlerChain.class)
方式2:基于角色的权限校验
@RestController
@IsAuthor(authentication = AddPermissionKeyHandler.class)
public class MyController {
@IsAuthor("visitor")
@GetMapping("say")
public String say(){
return "Hello World";
}
@IsAuthor("vip")
@GetMapping("eat")
public String eat(){
return "eat";
}
}
@Component
public class AddPermissionKeyHandler extends AutoAuthHandler {
@Override
public boolean isAuthor(HttpServletRequest request, String permission) {
ArrayList<String> permissions = new ArrayList<>();
//或者查询数据库为当前请求添加角色key
permissions.add("visitor");
this.setPermissions(request,permissions);
//查询成功,放行
return true;
}
}
当请求/say
时,由于注释@IsAutor
被添加到 MyController类上,AddPermisonKeyHandler
中的 IsAuthor 方法将首先运行。在这个方法中,字符串“visitor”被添加到用户的权限中,因此它将会验证通过并且您可以接收 HelloWorld。
当请求/say
时,由于权限列表中没有“vip”则会请求失败,抛出PermissionsException
异常,可以通过全局异常处理完成权限校验