我尝试使用spring boot和angular spa app。我需要将一些请求代理到另一台服务器。我已经使用此配置
配置了zuul代理zuul.routes.api.path=/api/**
zuul.ignored-patterns=/api/products/**, /api/products-meta, /api/invoices, /api/products
zuul.routes.api.url=http://another-api-server/
在我的情况下,它完美地运行,一些API由我的应用程序提供,一些由另一台服务器提供。
接下来,当用户尝试通过直接链接访问我的应用时,我想配置重定向到索引页面,例如http://localhost/products/1
对于这种情况,我使用了这个IndexController
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/**")
public String index() {
return "forward:/index.html";
}
}
这个堆栈跟踪 Gist
我的主要应用类
@EnableZuulProxy
@SpringBootApplication
public class Ng2bootApplication {
public static void main(String[] args) {
SpringApplication.run(Ng2bootApplication.class, args);
}
@Bean
public ApiGatewayFilter simpleFilter() {
return new ApiGatewayFilter();
}
}
ApiGatewayFilter仅用于记录代理请求,没有别的。
public class ApiGatewayFilter extends ZuulFilter {
private static Logger log = LoggerFactory.getLogger(ApiGatewayFilter.class);
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));
return null;
}
}