Spring 使用ZuulProxy重定向呼叫

Spring 使用ZuulProxy重定向呼叫,spring,redirect,spring-cloud,netflix-zuul,spring-cloud-netflix,Spring,Redirect,Spring Cloud,Netflix Zuul,Spring Cloud Netflix,我想做什么: 我希望有一个服务器,可以通过这种方式重定向某些类型的调用: @Slf4j public class SimpleRouteFilter extends ZuulFilter { @Value("${unauthorized.url.redirect:http://localhost:8090/testcategory/api/available}") private String urlRedirect; @Override public Str

我想做什么:

我希望有一个服务器,可以通过这种方式重定向某些类型的调用:

@Slf4j
public class SimpleRouteFilter extends ZuulFilter {

    @Value("${unauthorized.url.redirect:http://localhost:8090/testcategory/api/available}")
    private String urlRedirect;

    @Override
    public String filterType() {
        return "route";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    private boolean isAuthorizedRequest(HttpServletRequest request) {
        return false;
    }

    private void setRouteHost(RequestContext ctx) throws MalformedURLException {

        String urlS = ctx.getRequest().getRequestURL().toString();
        URL url = new URL(urlS);
        String protocol = url.getProtocol();
        String rootHost = url.getHost();
        int port = url.getPort();
        String portS = (port > 0 ? ":" + port : "");
        ctx.setRouteHost(new URL(protocol + "://" + rootHost + portS));
    }

    @Override
    public Object run() {
        log.debug("query interception");
        RequestContext ctx = RequestContext.getCurrentContext();
        try {
            if (isAuthorizedRequest(ctx.getRequest())) {
                log.debug("NOT redirecting...");
                setRouteHost(ctx);
            } else {
                log.debug("redirecting to " + urlRedirect + " ...");
                ctx.setRouteHost(new URL(urlRedirect));
            }
        } catch (MalformedURLException e) {
            log.error("", e);
        }
        return null;
    }
}
http://localhost:8080/myapp/api/rest/category/method

http://localhost:8090/category/api/method

我所做的:

我已将我的Zuul代理配置为:

info:
  component: Simple Zuul Proxy Server

cloud:
  conablefig:
    failFast: true
    discovery:
      end: true

zuul:
  routes:
    api: /myapp/api/rest/**

server:
  port: 8080

logging:
  level:
    ROOT: INFO
    org.springframework.web: INFO
    info.tcb: DEBUG
我正在以这种方式使用路由筛选器:

@Slf4j
public class SimpleRouteFilter extends ZuulFilter {

    @Value("${unauthorized.url.redirect:http://localhost:8090/testcategory/api/available}")
    private String urlRedirect;

    @Override
    public String filterType() {
        return "route";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    private boolean isAuthorizedRequest(HttpServletRequest request) {
        return false;
    }

    private void setRouteHost(RequestContext ctx) throws MalformedURLException {

        String urlS = ctx.getRequest().getRequestURL().toString();
        URL url = new URL(urlS);
        String protocol = url.getProtocol();
        String rootHost = url.getHost();
        int port = url.getPort();
        String portS = (port > 0 ? ":" + port : "");
        ctx.setRouteHost(new URL(protocol + "://" + rootHost + portS));
    }

    @Override
    public Object run() {
        log.debug("query interception");
        RequestContext ctx = RequestContext.getCurrentContext();
        try {
            if (isAuthorizedRequest(ctx.getRequest())) {
                log.debug("NOT redirecting...");
                setRouteHost(ctx);
            } else {
                log.debug("redirecting to " + urlRedirect + " ...");
                ctx.setRouteHost(new URL(urlRedirect));
            }
        } catch (MalformedURLException e) {
            log.error("", e);
        }
        return null;
    }
}
我在这个类中使用默认url只是为了测试重定向

我的问题是,当我调用例如
http://localhost:8080/myapp/api/rest/testcategory/available
它以404结尾,但我的过滤器记录它执行重定向

只有当我调用
http://localhost:8080/myapp/api/rest/

我做错了什么?
为什么double**不适用于所有其他通话

你能解决这个问题吗?现在正在处理这个问题。。。