我在一家设有VPN的公司工作。可以通过名称(\\machine
)或子域(\\machine.companyname.tld
;例如:ahammerthief.acme.net
来访问(Windows ActiveDomain / LDAP)网络上的计算机。
我试图使用Apache Commons Validator来将machine.companyname.tld
识别为有效的域/子域,尽管事实上我所在的公司外部无法提供它。
是否可以执行此操作,或者Validator是否不打算执行此操作?
我的代码如下:
String domain = null, in = JOptionPane.showInputDialog(
null, "Please enter the domain:", "NTLM/Samba Domain", JOptionPane.QUESTION_MESSAGE
);
if (null != in && !in.isEmpty()) {
DomainValidator validator = DomainValidator.getInstance(true);
// Always returns false. Why?
if (validator.isValidGenericTld(in) || validator.isValidLocalTld(in)) {
domain = in;
UniAddress addr = null;
try {
addr = UniAddress.getByName(domain, true);
} catch (UnknownHostException UHEx) {
System.err.println("Unknown Host (\"" + domain + "\": " + UHEx.getMessage());
UHEx.printStackTrace(System.err);
return;
}
// ... Ask user for credentials here. Never gets this far.
// TODO: Use credentials to create/overwrite a jCIFS SMBFile on the network
} else {
System.err.println("Entered domain (" + in + ") is invalid!");
}
} else {
System.err.println("Entered domain is null or empty!");
}
在提示时我输入的文本的格式为subdomain.companyname.tld
我可以使用正则表达式检查是否至少有两个“。”。所提供的字符串中的字符,并且它们前面至少有一个不是'。'的字符,但是我认为,如果Validator具有用于验证域和URL的类,那么我应该可以在其中使用它目的。
更新:我随后查看了以下问题:
isValid()
中的DomainValidator
。我会尝试一下是否可行。答案 0 :(得分:0)
用于验证域/子域的正确方法/功能是validator.isValid(String in)
,而不是validator.isValidGenericTld( String in)
或validator.isValidLocalTld(String in)
。最后两个仅验证最后一个句点('。')之后的部分。
在上面,validator
是DomainValidator
的实例。