是否可以在自定义 PreAuthorize 方法中获取 RequestMethod 动词?

max*_*axo 3 java spring spring-annotations spring-restcontroller request-mapping

我正在使用带有@PreAuthorize 的自定义访问检查器:

@RestController
@RequestMapping("/users")
public class Users {

    @PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', 'GET')")
    @RequestMapping(method = RequestMethod.GET)
    User getUsers() {
        ...
    }

    @PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', 'POST')")
    @RequestMapping(method = RequestMethod.POST)
    User addUser() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想去掉@PreAuthorize 注释中的字符串“GET”和“POST”。是否可以将@RequestMapping 中使用的 RequestMethod 以某种方式作为 hasAccessToMethod 的变量输入?

kag*_*ole 5

我不记得从注释中获取数据的 SpEL 表达式,但是您可以使用 SpEL 从带有#字符的方法的参数中获取值。注入HttpServletRequest,它有一个getMethod包含你想要的方法。

@PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', #request.method)")
@RequestMapping(method = RequestMethod.POST)
User addUser(HttpServletRequest request) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)