Grails 和子域

Posted

技术标签:

【中文标题】Grails 和子域【英文标题】:Grails and Subdomains 【发布时间】:2012-03-03 19:01:36 【问题描述】:

Grails 是否了解子域(即 subdomain.domain.com)?我没有在manual 中看到它的讨论。这纯粹是一个应用服务器/网络服务器问题吗?可以静态或动态绑定到 grails 控制器中吗?

【问题讨论】:

【参考方案1】:

对于 java web 应用程序访问哪个主机无关紧要。

    假设您在一台主机上分离了多个客户端,例如customer1.yourhost.com、customer2.yourhost.com 等,所有客户端都将具有相同的功能。

    在我提出的最简单的情况下,您只需使用编写一个过滤器,它总是会放置一些请求变量,如下所示:

    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 的多租户插件。

    如果您想为每个子域提供不同的功能,例如help.yourhost.com 和 www.yourhost.com,我建议你编写独立的 grails 应用程序。然后,您设置 nginx 服务器以将这些请求重定向到在您的应用程序服务器上运行的相应应用程序。

【讨论】:

感谢您解决问题并展示各种解决方案。您是否偶然想到了为 https 拆分子域,以便在 SSL 模式下拥有secure.mydomain.com? Spring-security-core 通道安全 (grails-plugins.github.com/grails-spring-security-core/docs/…) 似乎在这里受到限制。 所以你有 www.mydomain.com 并且想在用户登录时切换到 secure.mydomain.com?我看到将 cookie 放在不同的主机secure.mydomain.com 的最大问题。但是虽然我没有尝试过,但是通过将grails.plugins.successHandler.defaultTargetUrl设置为正确的值来配置spring security以重定向到绝对URL就足够了? 我目前的需要是仅在我处理信用卡的产品/服务结帐期间确保网站安全。处理完成后,返回非 SSL URL。网站目前的设计方式是,用户使用他的购物车登录,只是为了看看他得到了哪些折扣。从那里,他用他的购物车结账后,我去 SSL,然后当签证/mc 处理被收集/完成后,返回非 SSL。 我想最好的办法是明确地为这个用例打开一个新问题。当子域切换时,我不确定如何在客户端处理 cookie。对不起。 在 yorhosts 文件中输入一些条目,例如 127.0.0.1 asdf.localhost.de 127.0.0.1 www.localhost.de【参考方案2】:

我们使用各种子域在单个主机上运行一些 Grails 应用程序。在所有情况下,我们都使用 Apache 来前端 Tomcat 服务器,并使用 mod jk 或转发代理来处理不同 Grails 应用程序的应用程序。其中大部分是相当直截了当的,我们没有想到的是在各个域的根级别运行应用程序,例如 - http://app1.domain.com 而不是 http://app1.domain.com/app1

【讨论】:

要配置为根上下文,您需要更改 Config.groovy 以使用 grails.app.context="/"【参考方案3】:

我知道考虑子域的唯一地方是在使用多租户插件时用于租户解析。见http://tinyurl.com/6tuxwvs。

【讨论】:

以上是关于Grails 和子域的主要内容,如果未能解决你的问题,请参考以下文章

更新 Grails 中父域类中的“lastUpdated”字段

GRAILS ---命令 grails war 和 gradle build 有啥区别?

如何从 Grails 控制器和视图外部引用 Grails 域类字段?

IntelliJ 中的 Grails 3 调试

Grails 3.1.4 和 Docker - grails 命令返回“No profile found for name web”

Grails - 在刷新 grails 错误之前保存瞬态实例?