2016-05-31 20 views
0

首先,我使用Apache Commons目前版本UrlValidator庫。我正在嘗試驗證FQDN網址,如tcp://cor.rect.url:61616,但不幸的是,驗證程序會使此網址無效。我正在用以下參數創建Validator:正確的FQDN Uri無效的Apache公共UrlValidator

new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_LOCAL_URLS) 

有沒有人遇到過類似的問題?有什麼解決方法嗎?

+0

'UrlValidator',它調用['DomainValidator'](https://commons.apache.org/proper/commons-validator/apidocs/src-html/org/apache/commons/validator/routines/DomainValidator.html )檢查URL是否具有有效的TLD('isValidInfrastructureTld','isValidGenericTld'和'isValidCountryCodeTld'),並允許本地URL,它會檢查'isValidLocalTld',但'url'不在TLD列表中,因此您的URL被拒絕。 – nhahtdh

+0

這是正確的,謝謝 –

回答

0

UrlValidator 的源代碼時,它調用DomainValidator,其validates the TLD in the URL

完全合格的類名是org.apache.commons.validator.routines.UrlValidator,不要與過時的實施org.apache.commons.validator.UrlValidator

DomainValidator電話isValidTld檢查TLD混淆。使用ALLOW_LOCAL_URLS選項啓用時,它首先檢查域名與isValidLocalTld中的本地TLD列表,然後它檢查域爲isValidInfrastructureTld,isValidGenericTldisValidCountryCodeTld。但是,url不在任何列表中。

在允許本地URL的情況下,DomainValidator對本地URL(例如localhost)有最終檢查domain name without dot,但是您的URL也不屬於這種情況。

因此,您的網址被UrlValidator拒絕。

至於解決方案,看起來你可以定義自己的RegexValidator並將它傳遞給UrlValidator(RegexValidator authorityValidator, long options)構造函數。使用DomainValidator.isValidAuthority的源代碼作爲參考來解析來自權威部分的域並提供您自己的邏輯來驗證域可能是一個好主意。