2014-01-22 2 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 
} 

Однако это повторение и плохое. Im, используя этот 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/> 
...... 

P.S. Вы можете создавать другие теги для рассылки электронной почты пользователя, имени пользователя и т. Д.

+0

Я вижу, это очень полезно. Я не знал о пользовательских tagLibs до сих пор: | – Jan

Смежные вопросы