【问题标题】:Grails Spring Security session.user is nullGrails Spring Security session.user 为空
【发布时间】:2014-10-28 00:21:49
【问题描述】:

在之前的应用程序中,我们能够从控制器访问session.user.PROPERTY,我们使用注解来保证安全性。在一个新的应用程序中,我们决定使用RequestMap 来存储规则。在控制器中检查用户域类的值时,我们得到一个 NullPointerException 错误,指出 session.user 是一个空对象。

在之前的应用程序中,访问session.user.WHATEVER 并直接从会话中访问用户信息很方便,而无需使用principal.id 查询用户信息。

【问题讨论】:

  • 但在某个地方,e.g. in filters 必须做String userName = springSecurityService?.principal?.usernamesession.user = springSecurityService?.principal
  • 像这样将用户存储在会话中是一个非常糟糕的主意。该插件旨在方便访问用户信息,而无需像这样的黑客攻击。摆脱使用不应该存在的垃圾来污染会话的习惯 - 如果您最终确实拥有大量流量,您会很高兴您将会话保持在较小的范围内。尽可能使用 Spring Security principal,并且您始终可以创建自定义 UserDetailsService 以向 principal 添加额外数据(例如姓名、电话号码等),因为 GrailsUser 实例(或您的子类)是principal
  • @BurtBeckwith 是否有根据您的建议如何做到这一点的示例?
  • 它在文档中有自己的章节。

标签: grails spring-security


【解决方案1】:

如果您尝试检索当前登录的用户,最简单的方法是使用springSecurityService bean,例如

class MyController {

  def springSecurityService

  def myAction() {
    def currentUser = springSecurityService.currentUser
  }
}

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2021-08-02
    • 2012-02-19
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多