我正在处理grails应用程序,我为每个用户提供了一个Profile域。有两种方法可以查看和编辑用户的个人资料 -
因此,在第一种情况下,如果用户自己正在检查他的个人资料,那么在控制器端,我正在使用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。
答案 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
}
答案 1 :(得分:0)
当我使用if / else条件检查userInstance参数的null时,userInstance会传递null check,即使它是null。
这意味着Groovy编译器中存在一个非常基本的错误,我对此表示怀疑。试试这个:
def show(User userInstance){
userInstance = userInstance ?: springSecurityService.currentUser
}
当管理员正在查看用户的个人资料时,用户的ID会作为请求参数传递?如果是这样,那么阻止知道(或猜测)其他用户ID的恶意用户访问他们的个人资料会是什么?