2012-02-11 44 views
6

Grails是否知道任何有關子域(即subdomain.domain.com)的內容?我沒有看到它在manual中討論過。這純粹是一個應用程序服務器/ Web服務器的問題?可以綁定到grails控制器,靜態或動態?Grails和Subdomains

回答

10

訪問java web應用程序的哪個主機無關緊要。

  1. 假設您在一臺主機上分離了多個客戶端, customer1.yourhost.com,customer2.yourhost.com等,所有客戶端都具有相同的功能。

    在我propse最簡單的情況下,你只是用寫一個過濾器,它總會把一些請求變量,像這樣的:在任何地方

    def filters = { 
        all(controller:'*', action:'*') { 
         before = { 
          if (request.serverName.contains(".")) { 
           def clientName = 
            request.serverName.substring(0, request.serverName.indexOf(".")) 
    
           request.currentClient = Client.findByClientName(clientName) // e.g. 
          } 
         } 
        } 
    } 
    

    然後你就可以檢查request.currentClient當前訪問的子域。

    但是,如果它變得更復雜,請查看grails的一些多租戶插件。

  2. 如果你想爲每個子域有不同的功能,例如help.yourhost.com和www.yourhost.com,我會建議你編寫獨立的Grails應用程序。然後,您設置一個NGINX服務器,將這些請求重定向到您的應用服務器上運行的相應應用程序。

+0

感謝打破了問題並展示各種解決方案。你偶然有任何關於拆分https子域名的想法,以便在SSL模式下擁有secure.mydomain.com? Spring-security-core渠道安全性(http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html#17%20Channel%20Security)在這裏似乎有限。 – Ray 2012-02-11 23:32:53

+0

所以你有www.mydomain.com並且想在用戶登錄時切換到secure.mydomain.com?我將這個cookie放在不同的主機secure.mydomain.com上看到了最大的問題。然而,儘管我還沒有嘗試過,但通過將'grails.plugins.successHandler.defaultTargetUrl'設置爲適當的值,將彈簧安全性配置爲重定向到絕對URL就足夠了? – Chris 2012-02-12 14:55:12

+0

我目前的需求是僅在產品/服務結帳期間使我的網站安全,我在那裏處理信用卡。處理完成後,返回到非SSL URL。該網站目前的設計方式是,用戶使用購物車登錄,以查看他獲得的折扣。從那裏,我在用他的購物車結賬之後去SSL,然後當visa/mc處理被收集/完成時,返回到非SSL。 – Ray 2012-02-12 16:57:23

0

我知道的唯一一個考慮子域的地方是使用多租戶插件時的租戶解決方案。請參閱http://tinyurl.com/6tuxwvs

1

我們使用各種子域在單個主機上運行一些Grails應用程序。在所有情況下,我們都使用Apache來訪問Tomcat服務器,並使用mod jk或轉發代理將應用程序處理到不同的Grails應用程序。大部分是相當簡單的,我們還沒有想出運行在根級別爲各個領域的應用,例如 - 的 http://app1.domain.com代替http://app1.domain.com/app1

+2

要配置爲根上下文,您需要更改Config.groovy以使用grails.app.context =「/」 – 2012-02-17 08:33:50