Module bus.vortex

Class AuthorizeFilter

java.lang.Object
org.miaixz.bus.vortex.filter.AbstractFilter
org.miaixz.bus.vortex.filter.AuthorizeFilter
All Implemented Interfaces:
Filter, org.springframework.web.server.WebFilter

@Order(-2147483646) public class AuthorizeFilter extends AbstractFilter
访问鉴权过滤器,负责验证请求的合法性、方法、令牌和应用 ID

该过滤器是请求处理链中的重要组成部分,它通过检查请求的方法、版本、令牌和应用ID来验证请求的合法性。 过滤器会根据配置的资产信息验证请求的HTTP方法、令牌(如果需要)以及应用ID,确保只有合法的请求能够通过。

Since:
Java 17+
Author:
Justubborn
  • Constructor Details

    • AuthorizeFilter

      public AuthorizeFilter(AuthorizeProvider provider, AssetsRegistry registry)
      构造器,初始化授权提供者和资产注册表
      Parameters:
      provider - 授权提供者,用于处理令牌验证和授权逻辑
      registry - 资产注册表,用于存储和检索API资产信息
  • Method Details

    • doFilter

      protected reactor.core.publisher.Mono<Void> doFilter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain, Context context)
      内部过滤方法,执行授权验证逻辑

      该方法是过滤器的核心实现,负责执行完整的授权验证流程,包括: 1. 从请求中提取参数并设置上下文 2. 根据方法和版本查找对应的资产 3. 验证HTTP方法是否匹配 4. 如果需要,验证访问令牌 5. 验证应用ID是否匹配 6. 填充和清理请求参数 7. 将资产信息设置到上下文中

      Specified by:
      doFilter in class AbstractFilter
      Parameters:
      exchange - 当前的 ServerWebExchange 对象,包含请求和响应信息
      chain - 过滤器链,用于将请求传递给下一个过滤器
      context - 请求上下文,包含请求相关的状态信息
      Returns:
      reactor.core.publisher.Mono<Void> 表示异步处理完成,当所有验证通过后继续执行过滤器链
    • method

      protected void method(org.springframework.web.server.ServerWebExchange exchange, Assets assets)
      校验请求的 HTTP 方法是否匹配资产配置

      该方法检查当前请求的HTTP方法是否与资产配置中要求的方法一致。 如果不匹配,将根据期望的HTTP方法类型抛出不同的业务异常。

      Parameters:
      exchange - ServerWebExchange 对象,包含请求和响应信息
      assets - 资产信息,包含期望的HTTP方法类型
      Throws:
      org.miaixz.bus.core.lang.exception.ValidateException - 如果方法不匹配,抛出对应错误
    • authorize

      protected void authorize(org.springframework.web.server.ServerWebExchange exchange, Context context, Assets assets)
      校验令牌(如果资产要求)并将认证结果参数填充到请求参数中

      如果资产配置要求令牌验证,该方法将检查请求中是否包含有效的访问令牌。 如果令牌存在且有效,将从授权结果中提取用户信息并添加到请求参数中。 如果令牌缺失或无效,将抛出相应的业务异常。

      Parameters:
      exchange - ServerWebExchange 对象,包含请求和响应信息
      context - 上下文对象,包含令牌和通道信息
      assets - 资产信息,指示是否需要令牌验证
      Throws:
      org.miaixz.bus.core.lang.exception.ValidateException - 如果令牌缺失或认证失败