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

时间:2017-06-15 07:41:38

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

我想摆脱@PreAuthorize注释中的字符串'GET'和'POST'。是否有可能将@RequestMapping中使用的RequestMethod作为hasAccessToMethod的变量输入以某种方式获取?

1 个答案:

答案 0 :(得分:2)

我无法记住SpEL表达式从注释中获取数据,但您可以使用SpEL从#字符的方法参数中获取值。注入HttpServletRequest,它有getMethod方法,其中包含您想要的内容。

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