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



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

URL

可以是任何有/没有协议的东西,如http,https或可以包含相对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 中正确提取域名,该 URL 将在httphttps之后。

注意:- 我正在使用apache StringUtils,网址很可能像https://absdsbsbhttps://anmds.txt。也让我知道这是否是正则表达式匹配的好案例?

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

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

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

一旦你有了域名,如何有效地将其与白名单进行匹配有点麻烦,但我会考虑使用 TreeSet,并考虑使用它floorceiling方法来加速域前缀匹配。

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

最新更新