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

相關問題