Gateway⽹关丢失请求头解决办法
在搭建微服务时,本⼈使⽤的SpringSecurity Oauth2认证授权,使⽤密码⽅式,从认证中⼼获取了token后,要将token携带在请求头中,但是发现经过gateway ⽹关后,token丢失了。
经过研究后,总结了⼀种⽅法,可以解决:通过使⽤过滤器,重新构建⼀个request,再向服务发送请求。
在⽹关服务增加⼀个bean,代码如下:
@Component
public class RequestAuthFilter implements GlobalFilter, Ordered {
微服务网关和注册中心区别@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = Request();
String url = URI().getPath();
//忽略以下url
if(url.startsWith("/oauth") || url.startsWith("/login")){
return chain.filter(exchange);
}
String token = Headers().getFirst(HttpHeaders.AUTHORIZATION);
if(StringUtils.isBlank(token)){
ServerHttpResponse response = Response();
Response().setComplete();
}else{
ServerHttpRequest req = request.mutate().headers(header -> header.add(HttpHeaders.AUTHORIZATION, token)).build();
ServerWebExchange webExchange = exchange.mutate().request(req).build();
return chain.filter(webExchange);
}
}
@Override
public int getOrder() {
return 100;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论