2014-01-22 260 views
0

我在我的控制器def user = springSecurityService.principal中有此代碼。問題是,這樣當下面使用它,其他控制器無法找到用戶,則返回null屬性與彈簧安全性無效

class adminController{ 
    def springSecurityService 

    def adminController(){ 
     def user = springSecurityService.principal 
     [user:user] <-----this 
    } 

} 

你如何讓user可用其他措施?它的工作原理如果它是在每個單獨的動作下如此:

class adminController{ 
    def springSecurityService 

    def methodA(){ 
     def user = springSecurityService.principal 
     [user:user] 
     } 

    def methodB(){ 
     def user = springSecurityService.principal 
     [user:user] 
     } 
    } 
    ..... and so on 
} 

但是,這是重複的和不好的。我使用這個def user = springSecurityService.principal獲取一個屬性,並將其顯示在gsp模板上的頭文件中。

+0

使用springSecurityService.currentUser –

回答

1

爲了在gsp模板中顯示用戶屬性,您可以創建自定義taglib:以下是如何使用taglib顯示用戶全名的示例。

class SimpleTagLib { 
    def springSecurityService 
    static namespace = "ns" 

    def userFullName = { 
     User currentUser = springSecurityService.currentUser as User 
     if (currentUser) { 
      out << currentUser.firstName + " " + currentUser.lastName 
     } 
    }  
} 

,並在你的GSP模板,你只需要添加標籤這樣

....... 
<ns:userFullName/> 
...... 

附:您可以創建其他taglibs來解除用戶電子郵件,用戶名等。

+0

我看到這是非常有用的。直到現在我還不知道自定義tagLibs:| – Jan