2014-01-28 3 views
0

Я читал this, this и this, но не разрешил мою проблему.Grails and Spring Security: Как подключить пользователя к контроллеру?

Это моя ошибка:
Невозможно вызвать метод getCurrentUser() для нулевого объекта. StackTrace следующим образом:
сообщение: Не удается вызвать метод getCurrentUser() на нулевой объект

Мой код:

import org.springframework.dao.DataIntegrityViolationException 
import grails.plugin.springsecurity.annotation.Secured; 

@Secured('ROLE_SYSTEMADMIN') 
class InstanceController { 

... 

def save() { 
    def instanceInstance = new Instance(params) 
def springSecurityService 

println("user is"+springSecurityService.getCurrentUser()); 
... 

Я использую:

  • Ггц 3.4.0.
  • компиляции ': весна-безопасности ядра: 2,0-RC2'

Я вошел. Я уверен. Спасибо за ответ.

Разиэль

ответ

4

вы определили springSecurityService в качестве переменной метода. Вы должны определить его как переменную экземпляра:

class InstanceController { 
    def springSecurityService 
    def save() { 
    def instanceInstance = new Instance(params) 
    println("user is"+springSecurityService.getCurrentUser()); 
    .. 
    } 
} 

Теперь пружина может впрыснуть springSecurityService после того, как контроллер создан.

+2

Следует отметить, что в каждом контроллере есть метод, который вводится в каждый контроллер: getAuthenticatedUser() работает одинаково. Он также доступен как свойство контроллера: authenticatedUser. Это упоминается [здесь] (http://grails-plugins.github.io/grails-spring-security-core/docs/manual.1273/guide/single.html#24%20Controller%20MetaClass%20Methods) –

0

Услуга не вводится, потому что вы не заявляете, что являетесь глобальным свойством контроллера. Объявите его из вашего метода сохранения, а затем вызовите свойство currentuser. Это должно работать.

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