无法在null对象上调用方法isLoggedIn()

时间:2015-06-03 23:59:51

标签: grails spring-security

我实际上有两个与春天安全相关的问题。

1,我的控制器中有以下代码用于更改密码

def changePassword() {

        if (!securityService.isLoggedIn()) {
            redirect(action: 'auth', controller: 'login')
            return
        }
}

当我确认新密码后按下保存按钮时,它会生成以下错误

NullPointerException occurred when processing request: [POST] 
Cannot invoke method isLoggedIn() on null object.

现在我的问题是我错在哪里?

2,我的第二个问题也是类似的,我试图让当前的用户像这样

User currentUser = securityService.getCurrentUser()
            currentUser.gender = gender
            currentUser.save()

但它仍然会产生同样的错误 无法在null对象上调用方法getCurrentUser()

注意: - 我使用的是grails 2.4.4和spring security 2.0-RC4。

更新: - 我确实在我的控制器/服务中加入了def securityService

2 个答案:

答案 0 :(得分:1)

SpringSecurityService以这种方式自动装配到控制器:

   def springSecurityService

使用Groovy,您可以拨打springSecurityService.currentUser而不是getCurrentUser()

答案 1 :(得分:1)

只需在控制器中添加'def springSecurityService'

即可
Class UserController{

  def springSecurityService

  def changePassword(){
      //You can access springSecurityService now
    if (!springSecurityService.isLoggedIn()) {
        redirect(action: 'auth', controller: 'login')
        return
    }
  }
}