我有下游服务,重定向到x.jsp这个位置不在网关路由中,例如
gateway route --- localhost:8080/app - 192.168.1.1:80 (DownStream app)
在DownStream应用程序中,当用户未登录时,它会重定向到192.168.1.1:80/Login.jsp,该页面位于响应的Location
标题中。
此网址未使用网关。
我想编写一个zuul过滤器,通过在zuul路由动态中映射来更改此重定向URL,例如网关在zuul过滤器更改Location
标头中的每个URL。我怎么能这样做?
答案 0 :(得分:2)
您的下游应用应该尊重x-forwarded- *标头,而不是像这样生成重定向。但是,以下过滤器将为您更改重定向位置:
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
int status = RequestContext.getCurrentContext().getResponseStatusCode();
return status >= 300 && status < 400;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
Map<String, String> requestHeaders = ctx.getZuulRequestHeaders();
Optional<Pair<String, String>> locationHeader = ctx.getZuulResponseHeaders()
.stream()
.filter(stringStringPair -> LOCATION.equals(stringStringPair.first()))
.findFirst();
if (locationHeader.isPresent()) {
String oldLocation = locationHeader.get().second();
String newLocation = ...
locationHeader.get().setSecond(newLocation);
}
return null;
}