Java 是否可以在自定义预授权方法中获取RequestMethod谓词?
我正在使用带有@PreAuthorize:Java 是否可以在自定义预授权方法中获取RequestMethod谓词?,java,spring,spring-annotations,spring-restcontroller,request-mapping,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() { ... }
@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() {
...
}
}
我想去掉@PreAuthorize注释中的字符串“get”和“POST”。有可能以某种方式将@RequestMapping中使用的RequestMethod作为hasAccessToMethod的变量输入吗?我记不起从注释中获取数据的SpEL表达式,但您可以使用SpEL从方法的参数中获取值,该参数带有
字符。注入HttpServletRequest
,它有一个getMethod
方法,其中包含您想要的内容
@PreAuthorize("@customAccessChecker.hasAccessToMethod('USERS', #request.method)")
@RequestMapping(method = RequestMethod.POST)
User addUser(HttpServletRequest request) {
// ...
}
这是一个明智的回答。由于注释值需要一个常量Spring,因此不能将其与某个枚举值连接。从请求中,我还可以使用#request.servletPath而不是使用硬编码的“USERS”字符串获取资源名称。