Class TokenAuthInterceptor

java.lang.Object
tech.riemann.nif.auth.aop.TokenAuthInterceptor

public class TokenAuthInterceptor extends Object
Token认证拦截器

基于 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 Details

    • TokenAuthInterceptor

      public TokenAuthInterceptor(AuthService authService, List<String> withoutAuthenticationUrlRegulars)
      构造Token认证拦截器
      Parameters:
      authService - 认证服务
      withoutAuthenticationUrlRegulars - 无需认证的URL(Ant路径模式)列表
  • Method Details

    • getAuth

      public Auth getAuth(org.aspectj.lang.ProceedingJoinPoint joinPoint)
      获取方法或类上的@Auth注解

      优先从方法上获取,如果方法上没有则从类上获取

      Parameters:
      joinPoint - AOP连接点
      Returns:
      @Auth注解,如果不存在则返回null
    • filter

      public Object filter(org.aspectj.lang.ProceedingJoinPoint joinPoint) throws Throwable
      AOP拦截,拦截带有@Auth注解的类(@within)或方法(@annotation)

      执行流程: 1. 首先检查URL是否在白名单中 2. 获取@Auth注解配置 3. 如果没有注解或value为空,直接放行 4. 检查用户权限/角色 5. 验证通过则执行业务逻辑,否则抛出对应异常

      Parameters:
      joinPoint - 连接点
      Returns:
      业务方法执行结果
      Throws:
      Throwable - 业务方法抛出的异常或权限验证异常