我创建此方法只是为了解释这个场景。我想评估模型对象中的用户域对象。
我知道我可以评估返回对象和方法参数。但是当我尝试使用模型对象时出现以下错误,**是否无法在PostAuthorize / PreAuthorize中使用模型对象? **
[请求处理失败;嵌套异常是java.lang.IllegalArgumentException:无法根据原因计算表达式'#model.user.userName!='ramesh''] org.springframework.expression.spel.SpelEvaluationException:EL1008E:(pos 7):在'org.springframework.validation.support.BindingAwareModelMap'
类型的对象上找不到字段或属性'user'@PostAuthorize("#model.user.userName != 'ramesh'")
@RequestMapping(value="/createusername", method = RequestMethod.GET)
public String getCreateUserNamePage(ModelMap model) {
User user = new User();
String username = SecurityContextHolder.getContext().getAuthentication().getName();
if(username!=null)
user = customUserDetailsService.getUserByUsername(username);
else
user.setUserName(username);
model.put("user", user);
return "createusername";
}
答案 0 :(得分:3)
您的模型对象没有名为“user”的属性,而是您正在访问它:model.put("user", user)
。您的模型(ModelMap)似乎是某种类型的地图。
是否会延长java.util.Map
?
如果是这样,您可以使用如下拼写地图语法:#model[user].username
答案 1 :(得分:0)
两项工作:
@PostAuthorize("#model[user].userName != 'ramesh'")
or
@PostAuthorize("#model.asMap().get('user').getUserName() != 'ramesh'")
public String getSomething(Model model) {
User user = new User();
(...)
model.put("user", user);
return "view/page";
}