路由 - Spring Boot Web App& AWS Application Load Balancer

时间:2017-09-26 18:28:15

标签: spring amazon-web-services spring-mvc spring-boot elastic-load-balancer

我有一个Spring Boot网络应用程序,其中包含常规路线:

@GetMapping("/account")
public String search(@RequestParam(value="search"...

我现在已将其部署在AWS Application Load Balancer后面,我已使用基于路径的路由来定位我的应用。

我已在Load Balancer上配置/admin/*以转发到我的应用,效果很好。

但问题是,我的应用现在看到的是/admin/account,而不是预期的/account

AWS说:

  

请注意,路径模式用于路由请求,但不是   改变他们。例如,如果规则的路径模式为/ img / *,则为   规则会将对/img/picture.jpg的请求转发给指定的   目标群体作为对/img/picture.jpg的请求。

这有什么整洁的方法吗?或者我必须采取这样的方式:

@GetMapping("*/account")

2 个答案:

答案 0 :(得分:0)

我不认为AWS Applicxation loadbalancer中存在该功能 - 请查看stackoverflow.com/questions/39317685

在此引用相关部分

  

您可以在服务器上使用反向代理并执行类似的操作   (这是Nginx配置):

server {
  listen 80 default_server;

  location /secured/ {
    proxy_pass http://localhost:{service_port}/;
  }
}
     

这将剥离/ admin部分并代理其他所有内容   服务。请确保在服务端口后面有/后面。

答案 1 :(得分:0)

我唯一能想到的事情(除了网络服务器网址重写或像Zuul这样的反向代理)是在您的应用中重写网址。

一种简单的方法是使用UrlRewriteFilter

@Bean
public FilterRegistrationBean urlRewriteFilter() {
    FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
    filterRegistration.setFilter(new UrlRewriteFilter());

    // You probably want to set the order very low so it fires before
    // other filters, especially if you're using Spring Security
    filterRegistration.setOrder(Integer.MIN_VALUE);

    filterRegistration.setUrlPatterns(Collections.singletonList("/*"));

    Map<String, String> initParams = new HashMap<>();
    initParams.put("confPath", "url_rewrite.xml");

    filterRegistration.setInitParameters(initParams);

    return filterRegistration;
}

过滤器的maven坐标:

<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.3</version>
</dependency>

可以在此处找到配置文件示例:http://cdn.rawgit.com/paultuckey/urlrewritefilter/master/src/doc/manual/4.0/urlrewrite.xml