【问题标题】:spring security logout handler not working弹簧安全注销处理程序不起作用
【发布时间】:2012-10-05 17:12:11
【问题描述】:

我有 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 上运行良好,但注销不起作用 可能是什么问题?

或者你可以告诉如何获取所有登录用户

【问题讨论】:

    标签: spring grails spring-security


    【解决方案1】:

    当你设置时

    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
    

    【讨论】:

    • 使用全新的 grails 应用程序为我工作。请注意,只有当用户明确点击注销链接(例如http://&lt;hostname&gt;/&lt;appname&gt;/logout/)时,您才会收到注销事件。
    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 2012-08-04
    • 2011-06-22
    • 1970-01-01
    • 2019-04-27
    • 2015-06-06
    相关资源
    最近更新 更多