如何在会话中保存登录用户的Spring Security

时间:2010-05-30 06:27:28

标签: grails spring-security

此代码使用Spring Security Plugin(acegi)获取当前登录的用户:

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

我希望这样做:

session.user = person

这需要在用户登录后完成。我无法弄清楚我的代码在哪里执行此操作。它似乎应该是登录控制器中的某个位置,但我看不到在哪里。

2 个答案:

答案 0 :(得分:1)

你为什么要这样做?该人已经与会议中的校长联系。调用authenticateService.userDomain()来访问它。

答案 1 :(得分:0)

Spring不会直接在会话中设置用户对象。但是,他们在会话中放置了一个SPRING_SECURITY_CONTEXT对象。这包含经过身份验证的用户。

以下内容适用于您的gsp:

${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?
相关问题