1

我创建这个方法只是为了解释这个场景。我想评估模型对象内的用户域对象。

我知道我可以评估返回对象和方法参数。但是当我尝试使用模型对象时出现以下错误,**不能在 PostAuthorize / PreAuthorize 中使用模型对象吗?**

错误

[请求处理失败;嵌套异常是 java.lang.IllegalArgumentException: 无法评估表达式 '#model.user.userName != 'ramesh''] 根本原因 org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 7): Field or property在“org.springframework.validation.support.BindingAwareModelMap”类型的对象上找不到“用户”

代码

@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";
}
4

2 回答 2

3

您的模型对象没有名为“用户”的属性,而是您像这样访问它model.put("user", user):看来您的模型(ModelMap)是某种类型的地图。

它会延长java.util.Map吗?
如果是这样,您可以像这样使用拼写映射语法:#model[user].username

于 2012-10-25T14:15:40.850 回答
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";
}
于 2019-09-12T16:54:12.267 回答