注销时使用数据库会话1.2.0和spring安全内核的Grails2.1中的InvalidatedSessionException

注销时使用数据库会话1.2.0和spring安全内核的Grails2.1中的InvalidatedSessionException,session,grails,spring-security,grails-plugin,grails-2.0,Session,Grails,Spring Security,Grails Plugin,Grails 2.0,我需要会话存储在数据库中。我在1.2.0版中使用了robertfischer()中的数据库会话插件,并将其更新为grails2.1。我在我的主项目中安装了这个插件,除了SpringSecurityCore中的注销功能外,一切都很好。当我通过spring安全注销控制器注销时,我得到以下异常: URI: /myProject/j_spring_security_logout Class: grails.plugin.databasesession.InvalidatedSessionExceptio

我需要会话存储在数据库中。我在1.2.0版中使用了robertfischer()中的数据库会话插件,并将其更新为grails2.1。我在我的主项目中安装了这个插件,除了SpringSecurityCore中的注销功能外,一切都很好。当我通过spring安全注销控制器注销时,我得到以下异常:

URI: /myProject/j_spring_security_logout
Class: grails.plugin.databasesession.InvalidatedSessionException
Message: Session ABD84995E13B9D1AD4DBD228C0E5902C is invalid; cannot access/modify it.

也许你知道解决这个问题的办法

我的环境:

Grails 2.1
Spring Security Core 1.2.7
grails-database-session 1.2.0 by Robert Fischer (see Github)
mySQL-Database is connected (JDBC)

这是Spring Security Core中的一个bug:它试图访问一个无效会话,这违反了Servlet规范。但是,在他们修复之前,您可以将
config.grails.plugin.databasesession.ignoreinvalid
属性设置为
true
,并且您不会得到异常。

注销后,getAttribute()方法被调用,此方法调用checkAccess()方法,该方法抛出异常,因为会话不再存在(它已经无效)。我检查了spring security想要检查的属性:这是FLASH_示波器。(org.codehaus.groovy.grails.FLASH_SCOPE)您希望用什么方法来解决这个问题?这符合规范:请看——这是Spring Security的bug。但是,我已经找到了一个解决坏库的方法:查看更新的答案。出于某种原因,Spring似乎正在使会话无效,然后试图从会话中删除属性。你能启动调试器并找出原因吗?是的,就是这样。会话失效后,spring security是否希望访问会话中保存的FLASH_范围?我在jiira提出了一个错误的请求