Spring Cloud Gateway 自定义网络响应状态码(401,500,503等等)

近几天打算做一个网关校验的东西,但是发现在使用Gateway的过滤器的时候,没找到设置响应的状态码,网上找了好多也没找到emmmm,不过还好解决了。

直接贴上代码,下面有给出:

package com.llq.filter;

import com.alibaba.fastjson.JSON;
import com.llq.pojo.ResponseData;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@Component
public class TokenFilter implements GlobalFilter, Ordered {

    private static final Logger LOGGER = LoggerFactory.getLogger(TokenFilter.class);

    @Bean
    public GlobalFilter registryTokenFilter() {
        return new TokenFilter();
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest serverHttpRequest = exchange.getRequest();
        ServerHttpResponse serverHttpResponse = exchange.getResponse();
        String token = exchange.getRequest().getHeaders().getFirst("token");
        LOGGER.info("current request URI : {}", serverHttpRequest.getURI());
        if (StringUtils.isBlank(token)) {
            serverHttpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
            ResponseData responseResult = ResponseData.builder()
                    .code(401)
                    .msg("未授权")
                    .build();
            DataBuffer dataBuffer = serverHttpResponse.bufferFactory().wrap(JSON.toJSONString(responseResult).getBytes());
            serverHttpResponse.setStatusCode(HttpStatus.UNAUTHORIZED); // 设置响应状态码 401, 200, 503等等
            return serverHttpResponse.writeWith(Flux.just(dataBuffer));
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值