【问题标题】:How to know if an URL matches specific PATH如何知道 URL 是否与特定的 PATH 匹配
【发布时间】:2019-04-11 01:50:55
【问题描述】:

我正在尝试在 Java 过滤器中执行一些逻辑,具体取决于请求 URL 是否与特定 PATH 匹配。我们想使用 Java 的 PathMatcher 之类的东西,而不是 Regex。另外要求,明确声明不使用 Spring,因此 Spring 的 PathMatcher 不是一个选项。

例如给出以下 URL:
http://localhost:8080/base_path/customer/{PARAM_VAL1}/order/{PARAM_VAL2}

我正在寻找使 IF 产生 true 的方法:

PathMatcher pm = new SomeURLPathMatcherImp("/base_path/customer/*/order/*");

myURI = "/base_path/customer/customer001/order/98536"

if ( pm. matches(myURI) ){
    myFunction();
}

注意:我使用 PathMatcher 来描述问题。我想知道除了 Spring 之外是否有任何 API 库来执行类似于 Java 的 FileSystem 类实现的 URL PATH 匹配

【问题讨论】:

  • 您的问题是什么?如何获得PathMatcher?因为它是一个接口,所以你不能使用new,但是如果你阅读文档,即PathMatcher的javadoc,你会在“另见”中看到对FileSystem.getPathMatcher(java.lang.String)的引用“ 部分。如果您阅读其中的 javadoc,您将了解它是如何工作的。
  • @Andreas,感谢您的评论。每个 stackoverflow 用户都应该在发布问题之前用尽所有可能性。一种是阅读文档。回到我的问题,为了实现我所需要的,我不希望在 Java Web 过滤器中使用 FileSystem 类来测试 URL。还是这样做是正确的?

标签: java url path


【解决方案1】:
PathMatcher pm = FileSystems.getDefault().getPathMatcher("glob:/base_path/customer/*/order/*");

System.out.println(pm.matches(Paths.get("/base_path/customer/customer001/order/98536")));  // true
System.out.println(pm.matches(Paths.get("/base_path/customer/customer001/order")));        // false

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2019-07-22
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多