如何有效地检查给定 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.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.
}
}
现在我的问题是如何正确地从 URL 中提取域名,它将在 http
或 https
.
之后
注意:- 我正在使用 apache StringUtils,url 很可能类似于 https://absdsbsb
或 https://anmds.txt
。还让我知道它是否适合正则表达式匹配?
正确的方法是使用 URI
class.
您可以将它们视为字符串并查找特定的模式或子字符串,但是有多种 "tricky" 编写可用于传递 URLs 的 URLs 的方法那不应该。 (不过,如果您使用的是白名单而不是黑名单,那就更难耍花招了。)
总之,方法应该是使用URI
class解析URL字符串,然后获取并匹配protocol
和host
组件。
获得域名后,如何有效将其与白名单进行匹配有点困难,但我会考虑使用 TreeSet ,并考虑使用其 floor
和 ceiling
方法来加速域前缀匹配。
(如果正则表达式匹配会给您带来良好的性能,我会感到惊讶。)
我需要编写一个实用程序方法,它将采用 url 并检查给定的 url 是否有效?
URL 可以是任何 with/without 协议,例如 http、https 或 with 可以包含相对的 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.
}
}
现在我的问题是如何正确地从 URL 中提取域名,它将在 http
或 https
.
注意:- 我正在使用 apache StringUtils,url 很可能类似于 https://absdsbsb
或 https://anmds.txt
。还让我知道它是否适合正则表达式匹配?
正确的方法是使用 URI
class.
您可以将它们视为字符串并查找特定的模式或子字符串,但是有多种 "tricky" 编写可用于传递 URLs 的 URLs 的方法那不应该。 (不过,如果您使用的是白名单而不是黑名单,那就更难耍花招了。)
总之,方法应该是使用URI
class解析URL字符串,然后获取并匹配protocol
和host
组件。
获得域名后,如何有效将其与白名单进行匹配有点困难,但我会考虑使用 TreeSet ,并考虑使用其 floor
和 ceiling
方法来加速域前缀匹配。
(如果正则表达式匹配会给您带来良好的性能,我会感到惊讶。)