近几天打算做一个网关校验的东西,但是发现在使用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;
}
}