首先,我正在使用Apache Commons的当前版本的UrlValidator
库。我正在尝试验证tcp://cor.rect.url:61616
之类的FQDN网址,但不幸的是,验证程序会使此网址无效。我正在使用以下参数创建Validator:
new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_LOCAL_URLS)
之前有没有人遇到过类似的问题?有没有解决方法?
答案 0 :(得分:0)
根据UrlValidator
1 的源代码,它会调用DomainValidator
,validates 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列表检查域名,然后根据isValidInfrastructureTld
,isValidGenericTld
和{{1}检查域名}}。但是,isValidCountryCodeTld
并未出现在任何列表中。
在允许使用本地网址的情况下,url
会对本地网址domain name without dot进行最终检查(例如DomainValidator
),但您的网址也不属于这种情况。
因此,您的网址被localhost
拒绝。
至于解决方案,您似乎可以定义自己的RegexValidator
并将其传递给UrlValidator(RegexValidator authorityValidator, long options)
构造函数。使用DomainValidator.isValidAuthority
的源代码作为参考从权威部分解析域并提供自己的逻辑来验证域可能是个好主意。