新增 SaInterceptor 注解鉴权和路由拦截鉴权交换顺序的解决方案

This commit is contained in:
click33
2023-04-30 01:40:48 +08:00
parent a4320f3e7e
commit ca29da17ee
2 changed files with 25 additions and 1 deletions

View File

@@ -23,7 +23,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册 Sa-Token 拦截器打开注解鉴权功能
// 注册 Sa-Token 拦截器打开注解鉴权功能
registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
}

View File

@@ -470,6 +470,30 @@ public class GlobalExceptionHandler {
}
```
### Q在 SaInterceptor 中,注解鉴权总是先于路由拦截鉴权执行,能调整一下顺序吗?
框架没有提供直接的 API但你有以下两种方式可以做到这一点
- 方式1将 SaInterceptor 里的代码复制出来一份,按照你的需求改一下,然后使用你这个自定义的拦截器,不再使用官方的。
- 方式2注册两次 SaInterceptor 拦截器,例如:
``` java
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 路由拦截鉴权
registry.addInterceptor(new SaInterceptor(r -> {
// 路由拦截鉴权的代码 ...
}).isAnnotation(false)).addPathPatterns("/**");
// 打开注解鉴权
registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
}
}
```
如上,第一个完成路由拦截鉴权功能,第二个完成注解鉴权功能。
### Q我的项目权限模型不是RBAC模型很复杂可以集成吗
无论什么模型只要能把一个用户具有的所有权限塞到一个List里返回给框架就能集成