grails

2012-05-27 16 views
5

मैं एक ही ऐप्लिकेशन ऐसेgrails

  • sub1.domain.com
  • sub2.domain.com
  • www.domain.com के रूप में अधिक उप डोमेन से निपटने है में उप डोमेन में एक ही सत्र प्राप्त करने के लिए कैसे
  • domain.com

जब एप्लिकेशन का उपयोग करके उपयोगकर्ता इन उप डोमेन में बदल सकते हैं। जब ऐसा होता है तो सत्र इन सबडोमेन में साझा नहीं किया जाता है। मैं विकास और उत्पादन के लिए सर्वर के रूप में tomcat का उपयोग करें।

मैं साझा सत्रों को पहले विकास में करने की कोशिश कर रहा हूं। ऊपर पढ़ने पर, पाया गया कि जिस तरह से बिल्ला में इस लक्ष्य को हासिल करने के लिए है:

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

वहाँ एक रास्ता मैं विकास के वातावरण में बिल्ला में इस सेट कर सकते हैं है?

मैं _Events.groovy में नीचे दिए गए कोड की कोशिश की, सफलता के बिना:

मैं त्रुटि java.lang.IllegalArgumentException मिलती है: addChild: बाल नाम '' अनन्य नहीं है

मुझे लगता है क्या मैं की जरूरत है नीचे कोड की एक बराबर (के बाद से वहाँ कोई getContext विधि है कौन सा काम नहीं कर सकता) है:

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

कैसे मैं दोनों devel में यह काम कर प्राप्त कर सकते हैं पर कोई सुझाव ओपमेंट और उत्पादन? किसी भी मदद के लिए अग्रिम धन्यवाद।

उत्तर

0

डिफ़ॉल्ट टोमकैट संदर्भ तक पहुंचने के लिए, आपको प्लगइन की TomcatServer.groovy फ़ाइल में टॉमकैटसेवर की निर्माण विधि को पैच करना होगा।

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, फ़ाइल TomcatServer.groovy प्लगइन में अधिक नहीं है। इसे हटा दिया गया है जब प्लगइन को Tomcat7 (https://github.com/grails-plugins/grails-tomcat-plugin) का उपयोग करने के लिए अपग्रेड किया गया था। – Shiva

+0

मैंने पहली बार टॉमकैट प्लगइन संस्करण 1.3.9 को संशोधित करने का प्रयास किया। लेकिन यह टॉमकैट के एक संस्करण के साथ बंडल आता है जहां SetCessionCookieDomain को StandardContext क्लास में लागू नहीं किया गया है। इसलिए मैंने संस्करण 2.0.4 की कोशिश की, जहां टॉमकैटसेवर क्लास को हटा दिया गया प्रतीत होता है। – Shiva