如何有效地检查给定 URL(String) 是否包含 Java 中的白名单域(String)

How to efficiently check whether given URL(String) contains whitelist domain(String) in Java

我需要编写一个实用程序方法,它将采用 url 并检查给定的 url 是否有效?

URL 可以是任何 with/without 协议,例如 http、https 或 with 可以包含相对的 url 就像域是 example 并且 url 是"abc.com" 那么它是一个亲戚 URL。同样 它也可以是无效的 url,并且可以包含简单的字符串

我还有白名单列表 URL 并且可以更改运行时间,例如 youtube.comfacebook.com

我如何检查给定的 url 在我的情况下是否有效,我正在做的一些基本检查如下:-

 String url = "http://youtube.com";
    if(!StringUtil.isEmpty(url))
    {
        if (url.startsWith("http:") || pathToImage.startsWith("https://")) {
            // check if url is from whitlist domains

        } else {
            // do nothing, url is not internal domain.
        }
    }

现在我的问题是如何正确地从 URL 中提取域名,它将在 httphttps.

之后

注意:- 我正在使用 apache StringUtils,url 很可能类似于 https://absdsbsbhttps://anmds.txt。还让我知道它是否适合正则表达式匹配?

正确的方法是使用 URI class.

您可以将它们视为字符串并查找特定的模式或子字符串,但是有多种 "tricky" 编写可用于传递 URLs 的 URLs 的方法那不应该。 (不过,如果您使用的是白名单而不是黑名单,那就更难耍花招了。)

总之,方法应该是使用URI class解析URL字符串,然后获取并匹配protocolhost组件。

获得域名后,如何有效将其与白名单进行匹配有点困难,但我会考虑使用 TreeSet ,并考虑使用其 floorceiling 方法来加速域前缀匹配。

(如果正则表达式匹配会给您带来良好的性能,我会感到惊讶。)