grails - 在 Grails Spring Security 身份验证期间获取 Principal

标签 grails spring-security

我正在完成 Grails 中 Spring Security 的实现。这是我在 Spring Security 上的第一个实现 - 以前我使用 Acegi。

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

所以,我的问题:

  • 如何从 onInteractiveAuthenticationSuccessEvent 访问 SecurityContextHolder
  • 或者有没有更好的方法来获得认证原则?

  • 谢谢,

    最佳答案

    您可能需要更新导入 - 它从 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)
    }
    

    关于grails - 在 Grails Spring Security 身份验证期间获取 Principal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356170/

    相关文章:

    java - 有条件的 Spring Security 授权

    java - Spring boot bcrypt.BCryptPasswordEncoder 和身份验证问题

    grails 命令在终端中不起作用

    grails - 如何在 Grails 中更改 Controller 名称 URL?

    grails - 使用Grails CDN Assets 管道插件时,无需附加哈希码即可获取 Assets

    java - CSRF token 不是使用 Webflux 生成的

    spring-security - gsp 中的 Grails 3 Spring 安全标签

    java - Spring Security session 超时 - Java

    grails - 按名称查找实例,其中查询是其名称的任意部分,Grails

    grails - 动态覆盖Mock()spock返回的对象的属性