如何在Spring Filter中获取路径变量?

时间:2018-01-20 15:03:27

标签: spring spring-boot spring-security

我正在开发一个安全过滤器,需要根据路径变量的值进行一些检查。 我试图像这样做:

final Map<String, String> pathVariables = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

但是地图始终为空,看起来我的过滤器的优先级高于在请求中填充RequestMappingHandlerMapping属性的URI_TEMPLATE_VARIABLES_ATTRIBUTE

我尝试添加以下配置:

@Configuration
@EnableWebMvc
public class WebConfiguration {

    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping requestMappingHandler = new RequestMappingHandlerMapping();
        requestMappingHandler.setOrder(0);
        return requestMappingHandler;
    }
}

没有帮助,过滤器会在RequestMappingHandlerMapping被调用之前执行。

相对路径示例: /user/{uid}/action

我的控制器中有几条路径。它们都在路径中有uid路径变量,但是某些路径的设置顺序不同,有些路径的变量多于1个。

在我的安全过滤器中,我获取Auth标头,对其进行解密,从中获取userId并将其与路径变量值进行比较。如果这些ID不匹配,我返回403。

我想知道是否可以覆盖这两个动作的顺序。 或者,也许,还有一些其他方法可以检查过滤器中的路径变量吗?

1 个答案:

答案 0 :(得分:1)

在Spring中,过滤器在Servlets之前执行。 RequestMappingHandlerMapping调用DispatcherServlet,因此RequestMappingHandlerMapping不能用于检索过滤器中的路径变量。 所以,我想要么实现Interceptor,要么采用AOP方法。