java.lang.Object
org.miaixz.bus.vortex.filter.AbstractFilter
org.miaixz.bus.vortex.filter.AuthorizeFilter
- All Implemented Interfaces:
Filter,org.springframework.web.server.WebFilter
访问鉴权过滤器,负责验证请求的合法性、方法、令牌和应用 ID
该过滤器是请求处理链中的重要组成部分,它通过检查请求的方法、版本、令牌和应用ID来验证请求的合法性。 过滤器会根据配置的资产信息验证请求的HTTP方法、令牌(如果需要)以及应用ID,确保只有合法的请求能够通过。
- Since:
- Java 17+
- Author:
- Justubborn
-
Constructor Summary
ConstructorsConstructorDescriptionAuthorizeFilter(AuthorizeProvider provider, AssetsRegistry registry) 构造器,初始化授权提供者和资产注册表 -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcheckAppId(org.springframework.web.server.ServerWebExchange exchange, Assets assets, Map<String, String> requestParam) 校验应用 ID 是否匹配protected voidcheckMethod(org.springframework.web.server.ServerWebExchange exchange, Assets assets) 校验请求的 HTTP 方法是否匹配资产配置protected voidcheckToken(org.springframework.web.server.ServerWebExchange exchange, Context context, Assets assets, Map<String, String> params) 校验令牌(如果资产要求)并将认证结果参数填充到请求参数中protected reactor.core.publisher.Mono<Void> doFilter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain, Context context) 内部过滤方法,执行授权验证逻辑protected voidfillXParam(org.springframework.web.server.ServerWebExchange exchange, Map<String, String> requestParam) 填充 IP 参数到请求参数中Methods inherited from class org.miaixz.bus.vortex.filter.AbstractFilter
checkParams, filter, getAssets, getContext, getRequestMap, setContentType
-
Constructor Details
-
AuthorizeFilter
构造器,初始化授权提供者和资产注册表- 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:
doFilterin classAbstractFilter- Parameters:
exchange- 当前的 ServerWebExchange 对象,包含请求和响应信息chain- 过滤器链,用于将请求传递给下一个过滤器context- 请求上下文,包含请求相关的状态信息- Returns:
reactor.core.publisher.Mono<Void>表示异步处理完成,当所有验证通过后继续执行过滤器链
-
checkMethod
protected void checkMethod(org.springframework.web.server.ServerWebExchange exchange, Assets assets) 校验请求的 HTTP 方法是否匹配资产配置该方法检查当前请求的HTTP方法是否与资产配置中要求的方法一致。 如果不匹配,将根据期望的HTTP方法类型抛出不同的业务异常。
- Parameters:
exchange- ServerWebExchange 对象,包含请求和响应信息assets- 资产信息,包含期望的HTTP方法类型- Throws:
org.miaixz.bus.core.lang.exception.BusinessException- 如果方法不匹配,抛出对应错误: - 对于GET方法,错误码为_100200 - 对于POST方法,错误码为_100201 - 对于其他方法,错误码为_100508
-
checkToken
protected void checkToken(org.springframework.web.server.ServerWebExchange exchange, Context context, Assets assets, Map<String, String> params) 校验令牌(如果资产要求)并将认证结果参数填充到请求参数中如果资产配置要求令牌验证,该方法将检查请求中是否包含有效的访问令牌。 如果令牌存在且有效,将从授权结果中提取用户信息并添加到请求参数中。 如果令牌缺失或无效,将抛出相应的业务异常。
- Parameters:
exchange- ServerWebExchange 对象,包含请求和响应信息context- 上下文对象,包含令牌和通道信息assets- 资产信息,指示是否需要令牌验证params- 请求参数,将用于存储认证结果- Throws:
org.miaixz.bus.core.lang.exception.BusinessException- 如果令牌缺失或认证失败,抛出对应错误: - 令牌缺失时,错误码为_100106 - 令牌认证失败时,使用授权提供者返回的错误码和消息
-
checkAppId
protected void checkAppId(org.springframework.web.server.ServerWebExchange exchange, Assets assets, Map<String, String> requestParam) 校验应用 ID 是否匹配该方法验证请求中的应用ID是否与资产配置中的应用ID一致。 资产的应用ID是从方法名中提取的(方法名的第一部分)。 如果请求中未提供应用ID,会自动设置默认值。 如果提供了应用ID但不匹配,将抛出业务异常。
- Parameters:
exchange- ServerWebExchange 对象,包含请求和响应信息assets- 资产信息,从中提取期望的应用IDrequestParam- 请求参数,包含或将要包含应用ID- Throws:
org.miaixz.bus.core.lang.exception.BusinessException- 如果应用ID不匹配,抛出错误码为_100511的业务异常
-
fillXParam
protected void fillXParam(org.springframework.web.server.ServerWebExchange exchange, Map<String, String> requestParam) 填充 IP 参数到请求参数中该方法尝试从请求中提取客户端IP地址,并将其添加到请求参数中。 IP地址的提取顺序为: 1. 首先检查"x_remote_ip"请求头 2. 如果不存在,检查"X-Forwarded-For"请求头(处理代理情况) 3. 如果仍不存在,使用请求的远程地址
- Parameters:
exchange- ServerWebExchange 对象,包含请求和响应信息requestParam- 请求参数,将向其中添加IP地址信息
-