import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
public class AuthorizationFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 这里可以添加鉴权逻辑,例如检查请求头或者查询参数中的Token
// 假设我们检查请求头中的 "Authorization" 是否包含 "ValidToken"
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null || !token.equals("ValidToken")) {
// 如果鉴权失败,返回401 Unauthorized
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 如果鉴权成功,继续执行后续的过滤器和路由
return chain.filter(exchange);
}
@Override
public int getOrder() {
// 确保鉴权过滤器在其他过滤器之前执行
return -1;
}
}
这段代码定义了一个全局过滤器AuthorizationFilter
,用于实现统一的鉴权逻辑。它检查请求头中的Authorization
值是否为有效的鉴权令牌。如果令牌无效,则返回401状态码,表示未授权访问。这个例子展示了如何在Spring Cloud Gateway中添加一个全局过滤器来实现鉴权逻辑。