从登录用户访问另一个对象

时间:2013-08-31 23:44:29

标签: grails spring-security gsp

我正在使用Grails的Spring安全性。我的用户具有用户名,并且还引用了另一个名为Seller的域对象。

// Every user will usually be associated with a Seller
static belongsTo = [seller: Seller];

在GSP中,我可以通过以下方式显示登录用户的用户名:

<sec:ifLoggedIn>Hello <sec:username/> </sec:ifLoggedIn>

但我还要显示用户卖家对象的属性。我试试:

<sec:ifLoggedIn>Hello <sec:username/> <sec:seller.name/> </sec:ifLoggedIn>

但是这给了:

Tag [seller.name] does not exist. No tag library found for namespace: sec
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以创建自己的taglib来呈现当前用户的名称,例如

class TestTagLib {
    static final namespace = 'myTag'

    def name = { attrs ->
        User user = springSecurityService.currentUser as User
        out << user.name
    }
}

并在想要显示名称的地方使用它

<sec:ifLoggedIn>Hello <sec:username/> <myTag:name/> </sec:ifLoggedIn>

答案 1 :(得分:1)

虽然之前的答案更灵活,但如果您只是想显示已登录的用户名,可以尝试使用以下任一标签:

<sec:ifLoggedIn>Hello ${sec.username} </sec:ifLoggedIn>

<sec:ifLoggedIn>Hello ${sec.loggedInUserInfo(field:'username')} </sec:ifLoggedIn>