Spring安全注销后,grails.app.context丢失

时间:2016-04-27 21:00:34

标签: spring grails

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

我正在使用此设置:

grails.app.context = "/${appName}" 

appName在application.properties文件中定义,并且工作正常。

如上所述,我扩展了我的数据源和grails.serverURL设置。

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

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

http:// myapplication / [:]代替默认登录网址。

修改 在我的Config.groovy文件中添加了一些println语句。它似乎加载Config.groovy文件3次。前两次我看到了我期待看到的东西,第三次是它将上下文设置为[:]。

为什么它会三次加载配置,第三次丢失我的设置又是什么?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。经过多次调试和拔毛后,我找到了答案。注销后上下文丢失的情况并非如此。应用程序从未真正获得正确的设置。 (从某种意义上说)。有几个插件在启动期间调用config.groovy文件。其中一个恰好是multiTenant。当访问config.groovy和后续外部配置文件时,$ {appName}不再在范围内,因此tomcat加载应用程序时没有使用其默认约定。弹出注销然后尝试在注销后重定向到当前为空或[:]的$ {appName}。

我找到的解决方案是在外部配置文件中从

更改我的grails.serverURL
grails.serverURL = "http://myApplication.com/${appName}"

grails.serverURL = "http://myApplication.com" + grails.app.name

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

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