Apache Commons Validator - 验证 VPN(子)域

Apache Commons Validator - Validate VPN (Sub)Domain

我在一家设置了 VPN 的公司工作。 (Windows ActiveDomain/LDAP) 网络上的计算机可以通过名称 (\machine) 或子域 (\machine.companyname.tld;例如:ahammerthief.acme.net).

我正在尝试使用 Apache Commons Validator 将 machine.companyname.tld 识别为有效的 domain/subdomain,尽管我工作的公司外部无法使用它。

是否可以这样做,或者验证器不打算这样做?

我的代码如下:

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,我应该能够为此目的使用它。

更新: 我随后查看了以下问题:

  1. How can you check whether domain exists or not in Java?. One of the answers 建议使用 DomainValidator 中的 isValid()。我会试试看是否有效。

用于验证 domain/subdomain 的正确 method/function 是 validator.isValid(String in),而不是 validator.isValidGenericTld( String in)validator.isValidLocalTld(String in)。最后两个只验证最后一个句点('.')之后的部分。

在上面,validatorDomainValidator的实例。