在 getway 网关中, 增加全局过滤器,将前端请求携带的请求头拦截,通过一系列的业务处理,最终将解析的数据向下游微服务传递。
以前端请求携带请求头 authorization 为例,具体实现方式如下:
package cn.itcast.gateway.filters;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.获取请求参数
MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();
// 2.获取authorization参数
String auth = params.getFirst("authorization");
// 3.校验
if ("admin".equals(auth)) {
//将请求头的信息下放给微服务
exchange.getRequest()
.mutate()
.headers(httpHeaders -> httpHeaders.add("authorization", auth))
.build();
// 放行
return chain.filter(exchange);
}
// 4.拦截
// 4.1.禁止访问,设置状态码
exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
// 4.2.结束处理
return exchange.getResponse().setComplete();
}
}
其中, 最核心的代码如下:
exchange.getRequest()
.mutate()
.headers(httpHeaders -> httpHeaders.add("authorization", auth))
.build();
该段代码主要负责将拦截的请求头信息下放给下游的微服务。