有没有办法在 Controller 级别 @PreAuthorize 注释中访问 httpRequest 以获取 PathVariable 并将其用于 @PreAuthorize 注释中的表达式?
我希望能够执行以下操作,其中 #somePathVariable 将导致为 PathVariable 传递的实际值:
@RequestMapping(value = "/{somePathVariable}/something")
@PreAuthorize("@someBean.test(#somePathVariable)")
public class SomeController { ... }
如果我可以访问 HttpServletRequest 并手动获取 PathVariable 也足够了。
请注意,此表达式在回答之前处于 Controller 级别 。我很感激任何帮助!
最佳答案
正如@pvpkiran 已经评论过的那样。可能无法按照我想要的方式获取参数。然而,他使用 bean 手动访问 PathVariables 的解决方法似乎工作得很好。
@Component
@RequiredArgsConstructor
public class RequestHelper {
private final HttpServletRequest httpServletRequest;
/* https://stackoverflow.com/questions/12249721/spring-mvc-3-how-to-get-path-variable-in-an-interceptor/23468496#23468496 */
public Object getPathVariableByName(String name) {
final Map pathVariables = (Map) httpServletRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
return pathVariables.get(name);
}
}
和
@RequestMapping(value = "/{somePathVariable}/something")
@PreAuthorize("@someBean.test(@requestHelper.getPathVariableByName('somePathVariable'))")
public class SomeController { ... }
完成了工作。它并不完美,但它有效。另一个(可能更好)选项是在方法级别使用@PreAuthorize。
谢谢你的帮助!
关于java - 有没有办法在 Controller 级别@PreAuthorize 注释中访问 PathVariable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49296908/