2

我有 grails 插件 spring-security-core-1.2.1

我在 grails-app/conf/spring/resources.groovy 中将安全事件侦听器注册为 spring bean:

securityEventListener(LoggingSecurityEventListener)

并在 grails-app/conf/Config.groovy 中添加两个内容:

grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.logout.handlerNames =
    ['rememberMeServices',
            'securityContextLogoutHandler',
            'securityEventListener']

我的日志/注销监听器

class LoggingSecurityEventListener implements ApplicationListener<AbstractAuthenticationEvent>, LogoutHandler {

            void onApplicationEvent(AbstractAuthenticationEvent event) {
                System.out.println('appEvent')
            }


            void logout(HttpServletRequest request, HttpServletResponse response,
                            Authentication authentication) {
                System.out.println('logout')
            }

}

在 ApplicationEvent 上运行良好,但注销不起作用可能是什么问题?

或者您可以告诉如何获取所有日志记录用户

4

1 回答 1

4

当你设置

grails.plugins.springsecurity.useSecurityEventListener = true

spring 安全插件将注册它自己的事件侦听器,称为securityEventListener. 查找的处理程序handlerNames可能正在让插件注册一个而不是你的。尝试将您的 bean 重命名为:

loggingSecurityEventListener(LoggingSecurityEventListener)

并替换handlerNames

grails.plugins.springsecurity.logout.handlerNames = 
    ['rememberMeServices',
     'securityContextLogoutHandler',
     'loggingSecurityEventListener']

注意:配置属性名称已更改 ( plugins-> plugin)。如果您使用的是 grails spring-security 插件 2.0 或更高版本,请使用:

grails.plugin.springsecurity.logout.handlerNames
于 2012-10-15T19:13:52.560 回答