Class TokenAuthInterceptor
基于 Spring AOP(@Aspect + @Around)实现的认证拦截器,用于拦截带有Auth注解的类或方法。
注: 早期此拦截器曾改为 MethodInterceptor + DefaultPointcutAdvisor 编程式注册,
但实测在仅依赖 nif-support-spring-boot-starter 且未显式引入 aop 自动代理的下游工程里,
编程式 Advisor 未能对 Controller 方法织入(断点验证 invoke 从未命中)。
回归 @Aspect 注解方式,并要求 starter 引入 spring-boot-starter-aop 以提供
AspectJ 自动代理基础设施,@Aspect Bean 会被 @EnableAspectJAutoProxy(由
spring-boot-starter-aop 的自动配置开启)自动发现并织入,在下游工程稳定生效。
主要功能: 1. 拦截标记有@Auth注解的类或方法 2. 验证用户Token的有效性 3. 检查用户是否具有所需的角色或权限 4. 根据配置的逻辑关系(AND/OR)进行权限验证
拦截规则: - 如果URL匹配withoutAuthenticationUrlRegulars中的Ant路径模式,则跳过认证 - 如果@Auth注解的value为空,则跳过权限检查 - 如果用户是匿名用户(未认证),抛出AuthenticationException → 401 - 根据AuthType(ROLE或PERMISSION)进行相应的验证
使用示例:
@Auth(value = { "admin", "manager" }, type = AuthType.ROLE, logical = Logical.OR)
public void adminMethod() {
// 只有admin或manager角色才能访问
}
- Author:
- Kerbores(kerbores@riemann.tech)
-
Constructor Summary
ConstructorsConstructorDescriptionTokenAuthInterceptor(AuthService authService, List<String> withoutAuthenticationUrlRegulars) 构造Token认证拦截器 -
Method Summary
-
Constructor Details
-
TokenAuthInterceptor
构造Token认证拦截器- Parameters:
authService- 认证服务withoutAuthenticationUrlRegulars- 无需认证的URL(Ant路径模式)列表
-
-
Method Details
-
getAuth
获取方法或类上的@Auth注解优先从方法上获取,如果方法上没有则从类上获取
- Parameters:
joinPoint- AOP连接点- Returns:
- @Auth注解,如果不存在则返回null
-
filter
AOP拦截,拦截带有@Auth注解的类(@within)或方法(@annotation)执行流程: 1. 首先检查URL是否在白名单中 2. 获取@Auth注解配置 3. 如果没有注解或value为空,直接放行 4. 检查用户权限/角色 5. 验证通过则执行业务逻辑,否则抛出对应异常
- Parameters:
joinPoint- 连接点- Returns:
- 业务方法执行结果
- Throws:
Throwable- 业务方法抛出的异常或权限验证异常
-