【问题标题】:How to check if url has valid mapping when using java Filter on ServletRequests在 ServletRequests 上使用 java Filter 时如何检查 url 是否具有有效映射
【发布时间】:2025-12-25 00:35:07
【问题描述】:

我正在使用过滤器并保存包含所有 url 的映射(以及每个 url 被调用的次数)。

@WebFilter(filterName = "SessionFilter", urlPatterns = {"/*"})
public class SessionFilter implements Filter {...}

我有这个:@WebServlet(/test/aaa) 所以我希望过滤器能够获取请求并将其转发给我的服务。问题是,如果我发送一些伪造的请求,例如:"testing/lalalal" - 它会通过过滤器,然后将其插入到我的地图中(如果我没有有效的映射,则不会发生这种情况)

我尝试使用urlValidator,但似乎没有帮助。我还尝试查找是否出现错误(404)但不知道在哪里查找。

谁能给点建议?

谢谢!

【问题讨论】:

  • 你能详细说明你的问题是什么吗?根据您的过滤器 URL 模式,应该为每个请求调用过滤器,即使对于那些没有显式 servlet 映射的请求也是如此。如果这不是您想要的,您应该限制过滤器 URL 模式。

标签: servlets servlet-filters url-validation


【解决方案1】:

不要将过滤器映射到过于通用的 URL 模式,而是将其映射到实际感兴趣的 URL 和/或 servlet。下面的示例将其映射到特定的 servlet。

@WebFilter(filterName = "sessionFilter", servletNames = {"yourServlet"})

别忘了给你的 servlet 起个名字。

@WebServlet(servletName = "yourServlet", urlPatterns = {"/test/aaa"})

【讨论】: