Apache Commons Validator-验证VPN(Sub)域

时间:2018-09-11 14:50:07

标签: validation subdomain java-7 apache-commons

我在一家设有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的类,那么我应该可以在其中使用它目的。

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

  1. How to check validity of a subdomain in Java
  2. How can you check whether domain exists or not in Java?One of the answers建议使用isValid()中的DomainValidator。我会尝试一下是否可行。

1 个答案:

答案 0 :(得分:0)

用于验证域/子域的正确方法/功能是validator.isValid(String in),而不是validator.isValidGenericTld( String in)validator.isValidLocalTld(String in)。最后两个仅验证最后一个句点('。')之后的部分。

在上面,validatorDomainValidator的实例。