Jaz*_*epi 3 java spring spring-security
当我尝试在 @Preauthorize 注释中使用“或”运算符时,出现以下错误。
java.lang.IllegalArgumentException: Failed to evaluate expression '#authenticatingUser.id == #id or hasRole('ROLE_ADMIN')'
Run Code Online (Sandbox Code Playgroud)
我认为我的语法是正确的,如以下文档中的“或”示例所示。
http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/expressions.html
并且 Spring Security 明确表示它使用“Spring EL 表达式”
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html
但是我还没有在网上看到任何关于在 @Preauthorize 注释中使用布尔“或”运算符的人的例子。
这是控制器代码的完整性。表面上我希望用户能够更改自己的密码或管理员。我已经成功地单独使用了 the#authenticatingUser.id == #id和 the hasRole('ROLE_ADMIN'),但是使用了 或 我得到了一个错误。
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
@ResponseBody
@PreAuthorize("#authenticatingUser.id == #id or hasRole('ROLE_ADMIN')")
public User newPassword(@PathVariable int id, @RequestParam String newPassword, @ModelAttribute User authenticatingUser) {
User user = userService.findById(id);
user.setPassword(newPassword);
return userService.save(user);
}
Run Code Online (Sandbox Code Playgroud)
您确实可以使用如上所示的 EL,or如所写。在#访问适用于原语你所期望的方式。我遇到的问题与 SpringEL 表达式的构造无关。
@PreAuthorize("#authenticatingUser.id == #id or hasRole('ROLE_ADMIN')")
public User newPassword(@PathVariable int id, @RequestParam String newPassword, @ModelAttribute User authenticatingUser) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |