如何在Java中有效地检查给定URL(字符串)是否包含白名单域(字符串)
我需要写一个实用的方法,将采取一个网址,并检查是否给定的网址是有效的
URL可以是任何带有/不带有协议的内容,如http、https,也可以包含相对URL,如域为example
,URL为“abc.com”,则其为相对URL。另外,它也可以是无效的url,并且可以包含简单的字符串
此外,我还有一个白名单URL,可以更改运行时,如youtube.com
、facebook.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.
}
}
现在我的问题是如何正确地从位于http
或https
之后的URL中提取域名
注意:-我使用的是ApacheStringUtils,url很可能类似于https://absdsbsb
或https://anmds.txt
。同时让我知道这是否是正则表达式匹配的好例子
# 1 楼答案
正确的方法是使用^{} 类
您可以将它们视为字符串,并查找特定的模式或子字符串,但有各种“棘手”的方法来编写URL,这些方法可用于传递不应该传递的URL。(不过,如果您使用的是白名单而不是黑名单,这会使编写URL变得更加棘手。)
无论如何,方法应该是使用
URI
类来解析URL字符串,然后获取并匹配protocol
和host
组件一旦你有了域名,就有点折腾你如何有效地将EME>匹配到一个白名单,但是我会考虑使用一个树集,并考虑使用它的{{CD5>}和^ {< CD6>}方法来加速域前缀匹配。
(如果正则表达式匹配可以提供良好的性能,我会感到惊讶。)