2012-05-27 7 views
5

Ich habe eine einzige App mehr Sub-Domains wieWie die gleiche Sitzung über Sub-Domains in Grails bekommen

  • sub1.domain.com
  • sub2.domain.com
  • www.domain.com Handling
  • domain.com

Der Benutzer über diese Subdomains wechseln können, wenn die App. Wenn dies geschieht, wird die Sitzung nicht über diese Subdomains hinweg geteilt. Ich benutze Tomcat als Server für Entwicklung und Produktion.

Ich versuche, die freigegebenen Sitzungen zuerst in der Entwicklung arbeiten zu lassen. Beim Lesen up gefunden, dass der Weg, dies in tomcat zu erreichen ist:

<Context sessionCookiePath="/" sessionCookieDomain=".domain.com"> 

Gibt es eine Weise, die ich dies in tomcat in der Entwicklungsumgebung einstellen kann?

Ich habe versucht, den Code unten in _Events.groovy, ohne Erfolg:

Ich erhalte den Fehler java.lang.IllegalArgumentException: addChild: Kindernamen '' nicht eindeutig zuzuordnen sind

Ich gehe davon aus, was ich brauche ein Äquivalent des folgenden Codes ist (die nicht arbeiten können, da es keine getContext Methode):

eventConfigureTomcat = {tomcat -> 
    def context = tomcat.getContext("") //This function does not exist 
    context.setSessionCookieDomain(".domain.com") 
    context.setSessionCookiePath("/") 
} 

Vorschläge, wie ich diese Arbeit in beiden Entwick bekommen opment und produktion? Vielen Dank im Voraus für jede Hilfe.

Antwort

0

Um auf den Tomcat-Standardkontext zugreifen zu können, müssen Sie wahrscheinlich die create-Methode von TomcatServer in der TomcatServer.groovy-Datei des Plugins patchen.

TomcatServer(String basedir, String webXml, String contextPath, ClassLoader classLoader) { 
    tomcat = new Tomcat() 
this.buildSettings = BuildSettingsHolder.getSettings() 

    if(contextPath=='/') contextPath = '' 

    def tomcatDir = new File("${buildSettings.projectWorkDir}/tomcat").absolutePath 
    def ant = new AntBuilder()  
    ant.delete(dir:tomcatDir, failonerror:false)   

    tomcat.basedir = tomcatDir 

    context = tomcat.addWebapp(contextPath, basedir) 
    // ** do additional context stuff here ** 
    tomcat.enableNaming()  

    // we handle reloading manually 
    context.reloadable = false 
    context.setAltDDName("${buildSettings.projectWorkDir}/resources/web.xml") 

    def aliases = [] 
    def pluginManager = PluginManagerHolder.getPluginManager() 
    def pluginSettings = GPU.getPluginBuildSettings() 
    if(pluginManager!=null) { 
     for(plugin in pluginManager.userPlugins) { 
       def dir = pluginSettings.getPluginDirForName(GrailsNameUtils.getScriptName(plugin.name)) 
       def webappDir = dir ? new File("${dir.file.absolutePath}/web-app") : null 
       if (webappDir?.exists()) 
        aliases << "/plugins/${plugin.fileSystemName}=${webappDir.absolutePath}" 
    } 
} 

    if(aliases) { 
     context.setAliases(aliases.join(',')) 
    } 
    TomcatLoader loader = new TomcatLoader(classLoader) 

    loader.container = context 
    context.loader = loader 

    initialize() 
} 
+0

Valbuena, Die Datei TomcatServer.groovy ist nicht mehr im Plugin. Es wurde entfernt, als das Plugin auf Tomcat7 (https://github.com/grails-plugins/grails-tomcat-plugin) aktualisiert wurde. – Shiva

+0

Ich habe zuerst versucht, das Tomcat Plugin Version 1.3.9 zu modifizieren. Aber das kommt mit einer Version von tomcat, wo setSessionCookieDomain nicht in der StandardContext-Klasse implementiert ist. Daher habe ich die Version 2.0.4 versucht, bei der die TomcatServer-Klasse entfernt wurde. – Shiva

Verwandte Themen