目錄
一、問題
二、原因
1、修改配置
2、添加@Lazy注解在client上面
?3、啟動(dòng)成功
一、問題
當(dāng)在gateway的全局過濾器GlobalFilter中注入OpenFeign接口的時(shí)候會(huì)一直卡在路由中,但是不會(huì)進(jìn)一步,導(dǎo)致啟動(dòng)未成功也未報(bào)錯(cuò)失敗
2024-01-18 22:06:59.299 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [After]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Before]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Between]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Cookie]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Header]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Host]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Method]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Path]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Query]
2024-01-18 22:06:59.300 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [ReadBody]
2024-01-18 22:06:59.301 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [RemoteAddr]
2024-01-18 22:06:59.301 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [XForwardedRemoteAddr]
2024-01-18 22:06:59.301 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [Weight]
2024-01-18 22:06:59.301 INFO 19000 --- [ main] o.s.c.g.r.RouteDefinitionRouteLocator : Loaded RoutePredicateFactory [CloudFoundryRouteService]
二、原因
在gateway網(wǎng)關(guān)中不能使用openfeign同步調(diào)用
三、解決方法
1、修改配置
由于配置了spring.cloud.gateway.discovery.locator.enabled = true導(dǎo)致,改為false或者去掉該配置,因?yàn)槟J(rèn)為false,但是該方案會(huì)導(dǎo)致動(dòng)態(tài)路由不能加載,影響微服務(wù)調(diào)用。
gateway:
discovery:
locator:
enabled: false
2、添加@Lazy注解在client上面
在注入的AuthClient上面添加@Lazy注解
@Lazy
@Autowired
private AuthClient authClient;
全部代碼:?文章來源:http://www.zghlxwxcb.cn/news/detail-804181.html
@Component
@Slf4j
public class GatewayGlobalFilter implements GlobalFilter, Ordered {
@Autowired
private AuthProperties authProperties;
@Lazy
@Autowired
private AuthClient authClient;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//獲取請(qǐng)求頭的request
List<String> excludePaths = authProperties.getExcludePaths();
log.info(excludePaths.toString());
//判斷是否需要攔截
ServerHttpRequest request = exchange.getRequest();
RequestPath path = request.getPath();
//如果不需要攔截則放行
if(excludePaths.contains(path.toString())){
return chain.filter(exchange);
}
//獲取token
String authorization = request.getHeaders()
.getFirst("authorization");
String token= authorization.replace("Bearer ","");
// 驗(yàn)證token
String userId = authClient.getUserId(token);
if(userId==null){
//設(shè)置響應(yīng)碼為401
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
//放行
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
?3、啟動(dòng)成功
文章來源地址http://www.zghlxwxcb.cn/news/detail-804181.html
到了這里,關(guān)于SpringCloud GateWay 在全局過濾器中注入OpenFeign網(wǎng)關(guān)后無法啟動(dòng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!