spring cloud gateway GlobalFilter设置返回HTTPcode和response

本文介绍了一个使用Spring Cloud Gateway实现的权限验证过滤器,该过滤器通过检查请求头中的特定密钥来判断是否允许请求通过。
@Component
public class AuthGlobalFilterFilter implements GlobalFilter, Ordered {
    private static final String HEADER_KEY= "KEY";
    private static final String HEADER_LKEY = "LKEY";

    @Autowired
    ILoginInfoService loginInfoServiceImpl;

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        if(不满足一定条件){
     ServerHttpResponse serverHttpResponse = exchange.getResponse();
        serverHttpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
        byte[] bytes = "{\"status\":\"-1\",\"msg\":\"error\"}".getBytes(StandardCharsets.UTF_8);
        DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);
        return exchange.getResponse().writeWith(Flux.just(buffer));
}       
        


参考:https://stackoverflow.com/questions/48491098/how-to-add-some-data-in-body-of-response-for-cloud-api-gateway

### Spring Cloud GatewayGlobalFilter 的使用教程 #### 1. 全局过滤器简介 全局过滤器(`GlobalFilter`)是 Spring Cloud Gateway 提供的一种机制,用于拦截并处理所有的 HTTP 请求响应。它可以用来实现诸如认证授权、日志记录、性能监控等功能[^3]。 #### 2. 引入必要的依赖 为了在项目中使用 `GlobalFilter`,需要确保项目的 `pom.xml` 文件中包含了以下依赖项: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> ``` 此依赖会自动引入 Spring Cloud Gateway 所需的核心组件[^4]。 #### 3. 实现自定义的全局过滤器 创建一个类继承 `GlobalFilter` 并实现其接口中的方法。下面是一个完整的示例代码: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Configuration public class CustomGlobalFilterConfig { private static final Logger log = LoggerFactory.getLogger(CustomGlobalFilterConfig.class); @Bean public GlobalFilter customGlobalFilter() { return new CustomGlobalFilter(); } public static class CustomGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 记录请求的日志信息 log.info("Custom global filter is processing request: {}", exchange.getRequest().getPath()); // 可在此处添加额外逻辑,比如权限校验或修改请求头 // 将控制权交给下一个过滤器链 return chain.filter(exchange).then(Mono.fromRunnable(() -> { // 响应完成后可以执行一些清理操作 log.info("Response has been processed by the custom global filter."); })); } @Override public int getOrder() { // 设置过滤器优先级,数值越小优先级越高 return -100; } } } ``` 这段代码展示了如何创建一个名为 `CustomGlobalFilter` 的全局过滤器,并将其注册为 Bean。该过滤器会在每次请求到达网关时打印日志信息[^1]。 #### 4. 配置调试日志 如果希望查看更详细的流程信息,可以通过配置文件启用 Debug 模式: ```yaml logging: level: org.springframework.cloud.gateway: DEBUG reactor.netty.http.client: DEBUG ``` 这将帮助开发者更好地理解过滤器的行为及其与其他组件之间的交互情况。 #### 5. 工作原理概述 当客户端向 API Gateway 发送请求时,Spring Cloud Gateway 会依次调用所有已注册的 `GlobalFilter` 特定于某个路由的 `GatewayFilter`。这些过滤器按照它们各自的顺序属性 (`getOrder`) 来决定执行次序[^2]。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值