3

i am new to grails and trying to show the firstname of the user with: "shiro:principal property="firstName"

but it gives me the following error:

Error executing tag 'shiro:principal': No such property: firstName for class: java.lang.String

If i just to use "shiro:principal" it does print the username, but i need first name.

the domain class looks like this:

class ShiroUser {

    String firstName
    String lastName
    String username

thanks for your help!

4

2 に答える 2

3

ここでコードを見ることができます: https://github.com/pledbrook/grails-shiro/blob/master/grails-app/taglib/org/apache/shiro/grails/ShiroTagLib.groovy#L119

type="ShiroUser"正しいクラスのプリンシパルを取得するために、含める必要があるかもしれません。

したがって、GSPタグは<shiro:principal type="ShiroUser" property="firstName" />

アップデート:

コードを調べたところ、この機能を使用していないことがわかりました (使用したと思っていました)。あなたが求めていることを実現するために、私たちは実際に独自のタグライブラリを作成しました。多分これは私たちにとっても問題でしたか?

これが私たちが作成したタグライブラリです: UserTagLib.groovy

def loggedInUser = { attrs, body ->
    def user = _currentUser()

    if (!user) return

    def prop = user[attrs.property]

    if (prop) out << prop.encodeAsHTML()
}

def _currentUser() {
    def principal = SecurityUtils.subject?.principal

    if (!principal) return // No-one logged-in

    return User.get(principal)
}

使用例: <user:loggedInUser property="fullName"/>

于 2014-08-27T06:26:48.913 に答える