2017-10-19 76 views
0

我正在開發一個Spring Boot的應用程序,該應用程序在域下運行,假設;具有多個域的Web應用程序指向父文件夾的子文件夾

parentdomain.com 

從一個側面用戶輸入他們的內容,登錄,在parentdomain.com/admin後。這個內容經過處理後可以在子文件夾中公開訪問,比方說;

parentdomain.com/user-one-content 
parentdomain.com/user-two-content and so on. 

我需要爲每個用戶域名指向自己的文件夾,例如:

userone.com should be equivalent to parentdomain.com/user-one-content 

導航應該留在userone.com網站。

userone.com/first-page應該打開parentdomain.com/user-one-content/first-page。

現在應用程序安裝在PWS(Pivotal Web Services)上,但它們的路由系統並未提供此方法的解決方案,其中多個域指向父文件夾的子文件夾。

如何歸檔此功能?

回答

0

我會單獨離開Spring Boot並把它放在它前面的Web服務器上。你可以安裝Apache或Nginx嗎?域/子域重新路由在它們兩者中都是開箱即用的。

+0

推薦Web服務器是Tomcat的,儘管它可以在其他的人,只要他們能夠處理的Java Servlet的運行。 也許Apache或Nginx,可以與Tomcat結合使用。但似乎比PWS這樣的服務更爲複雜。 –

+0

然後,您應該使用HandlerInterceptor並在preHandle上,根據上述邏輯更改域和路徑。對於您的應用程序,它將顯示爲正好位於正確的域和路徑中。 – gspatel

0

最後我可以從gspatel

存檔,感謝諮詢隨着PWS生根系統或其他IaaS的雲服務提供商,我可以每根域到整個應用程序。

實現HandleInterceptor的preHandle方法,我檢查請求是否來自我的域(示例中的parentdomain.com)。或者,如果它來自網站的某個域,則說明該應用正在投放(示例中爲userone.com)。在這種情況下,我控制不訪問parentdomain.com或其他用戶的內容,將請求轉發到用戶主頁(示例中的user-one-content)。

這是一個提取物,我preHadle執行:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 

     ... 

     String URI = request.getRequestURI(); 
     String rootURI = "/" + idweb + "/"; 

     if(URI.equals("/") || !URI.startsWith(rootURI)){ 
      URI = rootURI; 

      RequestDispatcher requestDispatcher = request.getRequestDispatcher(request.getContextPath() + URI); 
      requestDispatcher.forward(request, response); 

     } 

    return true; 
} 
相關問題