gpt4 book ai didi

tomcat - 如何在grails中跨子域获得相同的 session

转载 作者:行者123 更新时间:2023-11-28 21:48:27 32 4
gpt4 key购买 nike

我有一个应用程序处理多个子域,例如

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

用户在使用该应用程序时可以在这些子域之间切换。发生这种情况时, session 不会在这些子域之间共享。我使用 tomcat 作为开发和生产服务器。

我试图让共享 session 首先在开发中工作。在阅读中,发现在tomcat中实现这一点的方法是:

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

有没有办法在开发环境的tomcat中设置这个?

我在 _Events.groovy 中尝试了以下代码,但没有成功:

eventConfigureTomcat = {tomcat ->
def context = tomcat.addContext("","/")
context.setSessionCookieDomain(".domain.com")
context.setSessionCookiePath("/")
}

我收到错误 java.lang.IllegalArgumentException: addChild: Child name '' is not unique

我假设我需要的是以下代码的等价物(因为没有 getContext 方法,所以无法工作):

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

关于如何在开发和生产中使它正常工作有什么建议吗?在此先感谢您的帮助。

最佳答案

要访问默认的 Tomcat 上下文,您可能必须在插件的 TomcatServer.groovy 文件中修补 TomcatServer 的创建方法。

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()
}

关于tomcat - 如何在grails中跨子域获得相同的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774351/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com