【发布时间】:2016-09-22 23:31:50
【问题描述】:
我想使用 @PreAuthorize 注释来保护 Spring REST 控制器中的方法,使用方法参数,例如
@RequestMapping("/something/{myParam}")
@PreAuthorize("@security.check(#myParam)")
public String getSomething(@PathVariable("myParam") Integer myParam) {
//...
}
Spring Security 需要一种在运行时发现参数名称的方法。当编译的类中没有调试符号时,需要添加一个特殊的注解@P或者Spring Data的@Param。因此,该方法如下所示:
@RequestMapping("/something/{myParam}")
@PreAuthorize("@security.check(#myParam)")
public String getSomething(@PathVariable("myParam") @P("myParam) Integer myParam) {
//...
}
是否有可能以某种方式提示 Spring Security 使用 @PathVariable 并避免像 @P 这样的附加注释?
根据the documentation从注解中读取参数名称是由AnnotationParameterNameDiscoverer完成的可以自定义支持任何指定注解的value属性。但是,我找不到任何关于如何自定义它。
顺便说一句,我使用的是 Java 7 和 Spring Security 3.2.9。
【问题讨论】:
-
你用的是什么版本的spring-core?
-
@RomanSandarkin 4.1.6.RELEASE
-
谢谢。看来我找到了解决办法)
标签: java spring spring-mvc spring-security