代码之家  ›  专栏  ›  技术社区  ›  Brad Rhoads

如何在会话中保存Spring安全登录用户

  •  1
  • Brad Rhoads  · 技术社区  · 16 年前

    def principalInfo = authenticateService.principal()
    def person = null
    if (principalInfo != "anonymousUser" && principalInfo.username) {
        person = Person.findByUsername(principalInfo.username)
    }
    

    然后我想做:

    session.user = person
    

    这需要在用户登录后完成。我不知道该把我的代码放在哪里。它似乎应该在登录控制器的某个地方,但我看不到在哪里。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Burt Beckwith    16 年前

    你为什么要这么做?此人已附加到会话中的负责人。调用authenticateService.userDomain()访问它。

        2
  •  0
  •   Jeroen Wijdemans    16 年前

    Spring不直接在会话中设置用户对象。但是,他们在会话中放置了一个SPRING\u SECURITY\u上下文对象。它包含经过身份验证的用户。

    以下人员将在你们的普惠制中工作:

    ${session.SPRING_SECURITY_CONTEXT?.authentication?.authenticated}
    

    或者直接在你的控制器代码里。

    static navigation = [
            group:'tabs', 
            order:10, 
            isVisible: {  session.SPRING_SECURITY_CONTEXT?.authentication?.authenticated }
        ]
    

    为了回答您的问题,您可以得到如下用户对象:

    session.SPRING_SECURITY_CONTEXT?.authentication?.principal?
    
    推荐文章