【问题标题】:getting Principal during Grails Spring Security authentication在 Grails Spring Security 身份验证期间获取 Principal
【发布时间】:2011-03-22 08:01:15
【问题描述】:

我在 Grails 中完成了 Spring Security 的实现。这是我在 Spring Security 上的第一个实现——之前我使用过 Acegi。

这是我遇到的问题。在 Acegi 中,我能够在 onInteractiveAuthenticationSuccessEvent() 回调中检索经过身份验证的用户,方法是访问 SecurityContextHolder、获取用户原则,然后从数据库中获取“活动”用户。在 Spring Security 中,SecurityContextHolder 似乎不可用 - 当我尝试访问它时,我收到低级别的 Grails 抱怨,关于某某对象上没有此类方法。

所以,我的问题:

  • 如何从 onInteractiveAuthenticationSuccessEvent 访问 SecurityContextHolder

  • 或者有没有更好的方法获取认证原理?

谢谢, 丹

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    您可能需要更新导入 - 它从 Spring Security 2 更改为 3 - 现在是 org.springframework.security.core.context.SecurityContextHolder 但方法没有改变。

    但是使用 springSecurityService 会更干净,它可以使用appCtx 变量从事件回调中访问:

    onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
       def principal = appCtx.springSecurityService.principal
       def user = User.get(principal.id)
    }
    

    【讨论】:

    • 感谢 Burt-感谢您提供的几个回复。只是出于好奇,您是 Grails 开发团队的一员吗?还是与他们密切合作?
    猜你喜欢
    • 2013-11-13
    • 2012-07-05
    • 2016-09-03
    • 2014-01-08
    • 2014-12-08
    • 2013-12-16
    • 2017-02-13
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多