Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法访问控制器级别@PreAuthorize注释中的PathVariable?_Java_Spring_Spring Mvc_Spring Security - Fatal编程技术网

Java 有没有办法访问控制器级别@PreAuthorize注释中的PathVariable?

Java 有没有办法访问控制器级别@PreAuthorize注释中的PathVariable?,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,是否有方法访问控制器级别@PreAuthorize注释内的httpRequest,以获取PathVariable并将其用于@PreAuthorize注释内的表达式 我希望能够执行以下操作,其中#somePathVariable将导致为PathVariable传递的实际值: @RequestMapping(value = "/{somePathVariable}/something") @PreAuthorize("@someBean.test(#somePathVariable)") publi

是否有方法访问控制器级别@PreAuthorize注释内的httpRequest,以获取PathVariable并将其用于@PreAuthorize注释内的表达式

我希望能够执行以下操作,其中#somePathVariable将导致为PathVariable传递的实际值:

@RequestMapping(value = "/{somePathVariable}/something")
@PreAuthorize("@someBean.test(#somePathVariable)")
public class SomeController { ... }
如果我可以访问HttpServletRequest并手动获取PathVariable,也就足够了


请注意,在回答之前,此表达式位于控制器级别。我将感谢任何帮助

因此@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);
    }
}

完成了任务。这不是完美的,但很有效。另一个(可能更好)选项是在方法级别使用@PreAuthorize


谢谢你的帮助

您可以将HttpServletRequest添加到控制器中的任何方法。不管你是否已经有另一个论点,Spring都会注入它。@pvpkiran,是的,但他不想这样做。他需要控制器级别的支持,而不是方法级别的支持。只是出于好奇,这些注释现在会发生什么?@M.Prokhorov我认为null立即传递给测试方法您最好的选择,可能唯一的选择是使用
RequestMappingHandlerMapping
。在某个类中自动关联,并创建方法来提取所需的信息。RequestMappingHandlerMapping包含有关rest端点映射的所有信息。
@RequestMapping(value = "/{somePathVariable}/something")
@PreAuthorize("@someBean.test(@requestHelper.getPathVariableByName('somePathVariable'))")
public class SomeController { ... }