【问题标题】:Spring Filter For URL Pattern with Path Variable带有路径变量的 URL 模式的 Spring 过滤器
【发布时间】:2021-10-18 03:01:08
【问题描述】:

我正在尝试在 Spring 中使用过滤器来过滤 centain url。 当我这样使用它时:

registrationBean.addUrlPatterns("/api/user/*");

它适用于所有以“/api/user”开头的网址

但是当我这样使用它时:

registrationBean.addUrlPatterns("/api/user/*/activate");

它不适用于“/api/user/607a7244-3db9-429a-89f0-1662da0b0e15/activate”

我在文档here 上检查了它, 他们说: * matches zero or more characters

有人知道为什么“/api/user/*/activate”与“/api/user/607a7244-3db9-429a-89f0-1662da0b0e15/activate”不匹配吗?

【问题讨论】:

  • 它适用于AntMatcher,但过滤器不使用AntMatcher,而是如何在servlet 规范中指定。所以只有第一个有效,第二个无效。

标签: java spring spring-mvc


【解决方案1】:

您正在尝试使用FilterRegistrationBean 注册过滤器。由于这是一个正在注册的Filter,因此 URL 映射依赖于 servlet 容器的支持而不是 Spring(Boot)中的支持。

servlet 容器的 URL 映射由 the servlet specification 中指定的内容确定(参见第 12.2 节)。在addUrlPatterns 方法的the javadoc 中也提到了这一点。

servlet 规范中的 URL 映射非常基础,只匹配 URL 的第一部分。这就是为什么你的第一个 /api/user/* 有效(因为 URL 以 /api/user 开头但不是 /api/user/*/activate 因为它不以 /api/user/*/activate 开头。它不是蚂蚁风格的表达,只是一个简单的模式URL 的开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2019-11-01
    • 2021-08-09
    相关资源
    最近更新 更多