1

我与往常一样路由一个春天启动的Web应用程序:路由 - 春季启动Web应用程序和AWS应用负载平衡器

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

现在我已经部署了这一个AWS应用负载平衡器,在这里我用的背后基于路径的路由来定位我的应用。

我在负载平衡器上配置了/admin/*,以转发到我的应用程序,它工作正常。

问题在于我的应用程序现在看到的是/admin/account,而不是它期望的/account

AWS说:

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

有没有什么清洁的方法呢?还是我不得不求助于这样的事情:

@GetMapping("*/account") 
+0

我不t认为该功能存在于AWS loadbalancer中 - 请检查此问题https://stackoverflow.com/questions/39317685 –

回答

0

我不认为在功能AWS Applicxation负载均衡器存在 - 看看这个stackoverflow.com/questions/39317685

引述有关部分这里

您可以在服务器上使用反向代理,做这样的事情 (这是Nginx的配置):

server { 
    listen 80 default_server; 

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

这将删除/ admin部分,并将其他所有内容代理到您的 服务。只要确保在服务端口后面/后面。

0

我能想到的唯一一件事(除了web服务器url重写或像Zuul这样的反向代理),是在你的应用程序中完成url重写。

使用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; 
} 

筛选器的行家协调一个简单的方法做到这一点:

<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

相关问题