2012-05-27 16 views
5

Mam pojedynczy aplikacja obsługi wielu subdomen, takich jakJak uzyskać tę samą sesję subdomen w Grails

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

użytkownik może przełączyć się w poprzek tych subdomen podczas korzystania z aplikacji. W takim przypadku sesja nie jest udostępniana w tych subdomenach. Używam tomcat jako serwera do rozwoju i produkcji.

Staram się, aby sesje współdzielone działały w pierwszej kolejności. Po przeczytaniu w górę, okazało się, że droga do osiągnięcia tego celu w Tomcat jest:

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

Czy istnieje sposób mogę ustawić to w Tomcat w środowisku rozwoju?

Próbowałem poniższy kod w _Events.groovy, bez powodzenia:

dostaję java.lang.IllegalArgumentException błędzie: addChild: imię dziecka "nie jest unikalna

Zakładam, co muszę to odpowiednik poniżej kod (który nie może pracować, ponieważ nie istnieje metoda getContext):

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

Wszelkie sugestie, w jaki sposób mogę dostać tej pracy zarówno devel rozwój i produkcja? Z góry dziękuję za pomoc.

Odpowiedz

0

Aby uzyskać dostęp do domyślnego kontekstu Tomcat, prawdopodobnie trzeba będzie załatać metodę tworzenia TomcatServer w pliku TomcatServer.groovy wtyczki.

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, plik TomcatServer.groovy nie jest już w wtyczce. został usunięty, gdy wtyczka została uaktualniona do użycia Tomcat7 (https://github.com/grails-plugins/grails-tomcat-plugin). – Shiva

+0

Po raz pierwszy spróbowałem zmodyfikować wtyczkę tomcat w wersji 1.3.9. Ale to jest dołączone do wersji tomcat, gdzie setSessionCookieDomain nie jest zaimplementowana w klasie StandardContext. Dlatego też wypróbowałem wersję 2.0.4, w której wydaje się, że klasa TomcatServer została usunięta. – Shiva