InvalidatedSessionException в Grails 2.1 с сеансом базы данных 1.2.0 и ядром безопасности spring при выходе из системы

Мне нужно, чтобы сеансы хранились в базе данных. Я использовал подключаемый модуль сеанса базы данных от Роберта Фишера ( https://github.com/RobertFischer/grails-database-session ) в версии 1.2.0 и обновил ее до версии grails 2.1. Я установил плагин в свой основной проект, и все работает нормально, кроме функции выхода из системы в весеннем ядре безопасности. Когда я выхожу из системы через Spring Security Logout-Controller, я получаю следующее исключение:

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)

person whitenexx    schedule 03.09.2012    source источник
comment
По какой-то причине кажется, что Spring аннулирует сеанс, а затем пытается удалить из него атрибут. Можете ли вы запустить отладчик и выяснить, в чем причина?   -  person Robert Fischer    schedule 05.09.2012
comment
Да это оно. После того, как сеанс стал недействительным, spring безопасность хочет получить доступ к FLASH_SCOPE, который сохраняется в сеансе? Я отправил запрос об ошибке в jiira jira.grails.org/browse/GPSPRINGSECURITYCORE-193.   -  person whitenexx    schedule 05.09.2012


Ответы (1)


Это ошибка в Spring Security Core: он пытается получить доступ к недействительному сеансу, что является нарушением спецификации сервлета. Но пока они это не исправят, вы можете установить для свойства config.grails.plugin.databasesession.ignoreinvalid значение true, и вы не получите исключения.

person Robert Fischer    schedule 04.09.2012
comment
После выхода из системы вызывается метод getAttribute(), и этот метод вызывает метод checkAccess(), который выдает исключение, поскольку сеанс больше не существует (он уже признан недействительным). Я проверил, какой атрибут Spring Security хочет проверить: это FLASH_SCOPE. (org.codehaus.groovy.grails.FLASH_SCOPE) Что бы вы предпочли для решения этой проблемы? - person whitenexx; 05.09.2012
comment
Это соответствует спецификации: см. https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html - так что это ошибка Spring Security. Однако у меня есть обходной путь для сломанной библиотеки: см. обновленный ответ. - person Robert Fischer; 06.09.2012