Java 是否可以在自定义预授权方法中获取RequestMethod谓词?

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() { ... }

我正在使用带有@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() {
        ...
    }
}

我想去掉@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”字符串获取资源名称。