【问题标题】:Correct FQDN Uri invalidate by apache commons UrlValidator由 apache commons UrlValidator 纠正 FQDN Uri 无效
【发布时间】:2016-09-29 18:08:54
【问题描述】:

首先,我使用的是 Apache Commons 的当前版本的 UrlValidator 库。我正在尝试验证 FQDN URL,例如 tcp://cor.rect.url:61616,但不幸的是,验证器使此 URL 无效。我正在使用以下参数创建验证器:

new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_LOCAL_URLS)

以前有没有人遇到过类似的问题?有什么解决办法吗?

【问题讨论】:

  • UrlValidator,它调用DomainValidator来检查URL是否有有效的TLD(isValidInfrastructureTldisValidGenericTldisValidCountryCodeTld),如果允许本地URL,它会检查isValidLocalTld , 但url 不在 TLD 列表中,因此您的 URL 被拒绝。
  • 没错,谢谢

标签: java regex apache


【解决方案1】:

根据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 列表检查域名,然后根据isValidInfrastructureTldisValidGenericTldisValidCountryCodeTld 检查域。但是,url 不会出现在任何列表中。

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

因此,UrlValidator 拒绝了您的 URL。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多