import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
public class AuthorizationFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 从请求中获取认证信息
String authHeader = exchange.getRequest().getHeaders().getFirst("Authorization");
// 认证逻辑
if (authHeader == null || !isAuthorized(authHeader)) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
// 返回未授权的响应
return DataBufferUtils.writeStatusAndHeaders(response, HttpStatus.UNAUTHORIZED, response.getHeaders());
}
// 如果认证通过,继续请求链
return chain.filter(exchange);
}
private boolean isAuthorized(String authHeader) {
// 这里只是示例,实际应该与认证服务交互
// 检查authHeader是否有效,返回true或false
return "letmein".equals(authHeader);
}
}
这个代码示例展示了如何在Spring Cloud Gateway中实现一个简单的全局过滤器,用于检查每个请求的认证信息。如果请求未被认证,它将返回一个401未授权的HTTP状态码。这个过滤器可以被用作微服务架构中的API网关,用来实现动态的权限管理。