2014-04-07 30 views
2

我正在做一個簡單的小grails應用程序,並決定在Shiro註冊/安全性,並且遇到了(可能是愚蠢的)問題。從Shiro Subject獲取到grails域對象

我已經生成了用戶(和領域)類,然後擴展了用戶以與帖子(即用戶可以編寫例如博客條目是一個想法)進行一對多關聯。但是,我如何從Shiro主題獲取Domain對象?

我已經試過如下:

def currentUser = SecurityUtils.getSubject() 
def posts = Post.findByUser(currentUser) 

但是,這給了我:「消息:沒有找到轉換從類型org.apache.shiro.web.subject.support.WebDelegatingSubject轉換成鍵入的能力COM .lordfoom.challengetrackr.User」

域類如下:

class User { 
    String username 
    String passwordHash 

    static hasMany = [ roles: Role, permissions: String, posts: Post ] 

    static constraints = { 
     username(nullable: false, blank: false, unique: true) 
    } 
} 



class Post { 

    String title; 
    String body; 

    static belongsTo = [user:User] 
    static constraints = { 
     title(nullable:false, blank: false, unique: true) 
     user(unique:true) 
    } 
} 

有一個簡單的方法從四郎除獲取當前登錄用戶的domai n對象?或者我必須以某種方式查找它?

任何幫助表示讚賞。

回答

4

如果我正確理解這一點,你只是想檢索當前登錄用戶的用戶對象,是嗎?

我通常通過設置一個包含兩個方法的UserService來實現這一點。然後我可以在整個應用程序中實現getLocalUser()。

import org.apache.shiro.SecurityUtils 

class UserService { 
    /** 
    * for currently logged in user 
    */ 
    def getLocalUserId(){ 
     def userName = SecurityUtils.subject?.principal 
     User.findByUsername(userName) 
    } 

    User getLocalUser(){ 
     getLocalUserId() 
    } 
} 

希望這會有所幫助。

+0

謝謝,有道理 - 我想我只是希望它以某種方式附加到主題,因爲我使用插件生成域對象 - 一廂情願的想法;) – FOOM