grails domain object null check not working - grails 2.3.7

时间:2014-05-21 07:33:11

标签: grails spring-security

我正在处理grails应用程序,我为每个用户提供了一个Profile域。有两种方法可以查看和编辑用户的个人资料 -

  1. 用户点击名为“个人资料”的标题链接,这样他就可以查看自己的个人资料并根据需要对其进行修改。
  2. 管理员可以通过点击所有用户列表中的用户链接来查看任何用户的个人资料。
  3. 因此,在第一种情况下,如果用户自己正在检查他的个人资料,那么在控制器端,我正在使用Spring安全方法" springSecurityService.currentUser"来检查用户。 在第二种情况下,如果管理员正在检查用户的配置文件,则userInstance将传递给控制器​​操作。

    当我在第一种情况下使用它时出现问题,即用户自己正在检查他的个人资料。这里当我使用if / else条件检查userInstance参数的null时,userInstance传递null检查,即使它是null。当我在控制台上打印它时,它会给我一个空指针异常。

    代码是 -

    def show(User userInstance){
        println("Inside show action of profileController")
    
        println("userInstance: " + userInstance)            //Output- userInstance: null
    
        if(userInstance != null){
            println("userInstance: " + userInstance)        //Output- userInstance: null
        }else{
            println("userInstance is null")                 //It never prints even though userInstance is null
    
            userInstance = springSecurityService.currentUser
        }
    
        //More functionality to come
    }
    

    所以基本上它是非常基本的东西,但是我无法弄明白,为什么它不检查null但是将sill打印为null。

2 个答案:

答案 0 :(得分:0)

使用此方法:忘记isNull函数,但也忘记userIntance == null语句并尝试此!userInstance,它的工作原理如下!!!

实施例

var user = User.get(10);

据你说:

def show(User userInstance){
    println("Inside show action of profileController")

    println("userInstance: " + userInstance)            //Output- userInstance: null

    if(!userInstance){
        println("userInstance: " + userInstance)        //Output- userInstance: null
    }else{
        println("userInstance is null")                 //It never prints even though userInstance is null

        userInstance = springSecurityService.currentUser
    }

    //More functionality to come
}

Check this groovy script example on groovy Console Here

答案 1 :(得分:0)

  

当我使用if / else条件检查userInstance参数的null时,userInstance会传递null check,即使它是null。

这意味着Groovy编译器中存在一个非常基本的错误,我对此表示怀疑。试试这个:

def show(User userInstance){
    userInstance = userInstance ?: springSecurityService.currentUser
}

当管理员正在查看用户的个人资料时,用户的ID会作为请求参数传递?如果是这样,那么阻止知道(或猜测)其他用户ID的恶意用户访问他们的个人资料会是什么?