【问题标题】:How to get Path Variables in Spring Filter?如何在 Spring Filter 中获取路径变量?
【发布时间】:2018-01-21 00:45:51
【问题描述】:

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

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

但是地图总是空的,看起来我的过滤器比在请求中填充URI_TEMPLATE_VARIABLES_ATTRIBUTE 属性的RequestMappingHandlerMapping 具有更高的优先级。

我尝试添加以下配置:

@Configuration
@EnableWebMvc
public class WebConfiguration {

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

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

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

我的控制器中有几条路径。它们的路径中都有uid path var,但有些路径的设置顺序不同,有些路径的变量超过1个。

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

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

【问题讨论】:

    标签: spring spring-boot spring-security


    【解决方案1】:

    在 Spring 中,过滤器在 Servlet 之前执行。而RequestMappingHandlerMapping 是由DispatcherServlet 调用的,所以RequestMappingHandlerMapping 不能用于检索Filter 中的路径变量。 所以,我正在考虑要么实现一个拦截器,要么采用 AOP 方法。

    【讨论】:

    • 嘿,2年后的任何解决方案:)
    • 我也在等。
    猜你喜欢
    • 2012-08-28
    • 2021-08-09
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多