spring安全注销后grails.app.context丢失

spring安全注销后grails.app.context丢失,spring,grails,Spring,Grails,我有一个试图实现外部配置的应用程序。这部分工作正常。但是,现在看起来有些配置设置丢失了 我正在使用此设置: grails.app.context = "/${appName}" appName在application.properties文件中定义,工作正常 如上所述,我扩展了我的datasource和grails.serverURL设置 现在,当我单击我的注销链接时,我会被重定向到http://myapplication/[:]/j_spring_security_logout 我可以用上

我有一个试图实现外部配置的应用程序。这部分工作正常。但是,现在看起来有些配置设置丢失了

我正在使用此设置:

grails.app.context = "/${appName}" 
appName在application.properties文件中定义,工作正常

如上所述,我扩展了我的datasource和grails.serverURL设置

现在,当我单击我的注销链接时,我会被重定向到http://myapplication/[:]/j_spring_security_logout

我可以用上下文替换[:],它会将我带到正确的url(注销后),但是当尝试重新登录到应用程序时,我会得到这个url

http://myapplication/[:]代替默认登录url

编辑 在我的Config.groovy文件中添加了一些println语句。它似乎加载了Config.groovy文件3次。前两次我看到了我期望看到的内容,第三次是当它将上下文设置为[:]时


为什么要加载配置三次,第三次又是什么让我失去了设置?

回答我自己的问题。经过多次调试和吹毛求疵,我找到了答案。这并不是说注销后上下文丢失了。应用程序从未真正获得正确的设置。(在某种意义上)。有几个插件在启动时调用config.groovy文件。其中一个碰巧是多租户。当访问config.groovy和后续的外部配置文件时${appName}不再在作用域中,因此tomcat加载的应用程序使用默认约定不会出现问题。然后,spring注销尝试在注销后重定向到${appName},当时它是空的或[:]

我找到的解决方案是在外部配置文件中更改grails.serverURL

grails.serverURL = "http://myApplication.com/${appName}"

这允许application.properties文件包含app.name变量,并允许外部配置文件使用war文件的不同部署所需的正确属性


这可能不是最优雅的解决方案,但它解决了spring注销的问题。

帮助了我。我做了paypal配置,其中serverUrl应该被更改。请确保您为生产设置了正确的设置。
grails.serverURL = "http://myApplication.com" + grails.app.name