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

时间:2017-06-11 14:45:34

标签: java string url apache-stringutils

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

网址可以是带有/不带协议的任何内容,例如http,https或者可以包含相对网址,例如,如果域名是example,网址是" abc.com"那么它是一个相对的URL。还它也可以是无效的网址,并且可以包含简单的字符串

此外,我还列出了列入白名单的网址,可以更改youtube.comfacebook.com等运行时。

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

 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.
        }
    }

现在我的问题是如何从httphttps之后的网址中正确提取域名。

注意: - 我正在使用apache StringUtils,很可能url可能像https://absdsbsbhttps://anmds.txt。如果它是正则表达式匹配的好例子,还让我知道吗?

1 个答案:

答案 0 :(得分:5)

执行此操作的正确方法是使用URI类。

您可以将它们视为字符串并查找特定的模式或子字符串,但有各种各样的"棘手的"写入可用于传递不应该访问的URL的URL的方法。 (但是,如果你使用的是白名单而不是黑名单,那就太难了了。)

无论如何,该方法应该是使用URI类来解析URL字符串,然后获取并匹配protocolhost组件。

一旦你拥有了这个域名,你就有效将它与白名单进行匹配有点夸张,但我会考虑使用TreeSet,并考虑使用它用于加速域前缀匹配的floorceiling方法。

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