私はすべてのリクエストをAPIに単一のエンドポイントにいくつかの条件に基づいて転送しようとしています。すべてのZuulプロキシリクエストを単一のURLに動的に再ルーティング
2017-03-03 16:11:30.735 EST 0037 DEBUG o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/outage/alerts/public'; against '/beans/'
:
はpublic class OutagePeriodFilter extends ZuulFilter {
@Override
public String filterType() {
return "route";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return isOutagePeriod();
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
// if outage - redirect everyone to http://localhost:8082/outage
try {
String url = UriComponentsBuilder.fromHttpUrl("http://localhost:8082").path("/outage").build()
.toUriString();
ctx.setRouteHost(new URL(url));
} catch(MalformedURLException mue) {
log.error("Cannot forward to outage period website");
}
return null;
}
private boolean isOutagePeriod() {
// returns true if outage
}
}
しかしhttp://localhost:8080/alerts/public
に要求を行った後、私のAPIのログが表示さ:
Gateway
アプリは、私は次のフィルタを作成した8080
ポート上で実行されます何らかの理由で元のPATHをリダイレクトPATHに追加し、その結果、/outage/alerts/public
wh ichは存在しません。ちょうど/outage
にリクエストしたいと思います。
ctx.setRouteHost()
と同じように、フィルタにブレークポイントを設定すると、正しいURL(http://10.50.36.43:8082/outage/
)が表示されます。
マイapplication.properties
:
zuul.routes.api.path=/api/** zuul.routes.api.url=http://localhost:8082/