正确的FQDN Uri由apache commons UrlValidator

时间:2016-05-31 16:05:00

标签: java regex apache

首先,我正在使用Apache Commons的当前版本的UrlValidator库。我正在尝试验证tcp://cor.rect.url:61616之类的FQDN网址,但不幸的是,验证程序会使此网址无效。我正在使用以下参数创建Validator:

new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_LOCAL_URLS)

之前有没有人遇到过类似的问题?有没有解决方法?

1 个答案:

答案 0 :(得分:0)

根据UrlValidator 1 的源代码,它会调用DomainValidatorvalidates the TLD in the URL

1 完全限定的类名是org.apache.commons.validator.routines.UrlValidator,不要与弃用的实现混淆org.apache.commons.validator.UrlValidator

DomainValidator致电isValidTld查看TLD。启用ALLOW_LOCAL_URLS选项后,它会首先根据isValidLocalTld中的本地TLD列表检查域名,然后根据isValidInfrastructureTldisValidGenericTld和{{1}检查域名}}。但是,isValidCountryCodeTld并未出现在任何列表中。

在允许使用本地网址的情况下,url会对本地网址domain name without dot进行最终检查(例如DomainValidator),但您的网址也不属于这种情况。

因此,您的网址被localhost拒绝。

至于解决方案,您似乎可以定义自己的RegexValidator并将其传递给UrlValidator(RegexValidator authorityValidator, long options)构造函数。使用DomainValidator.isValidAuthority的源代码作为参考从权威部分解析域并提供自己的逻辑来验证域可能是个好主意。