升级至Java 11后,LdapURL类的替代方案咨询
Java 11中替代LdapURL判断LDAP连接安全性的方案
Java 11移除了com.sun.jndi.ldap.LdapURL这个非公开API,要替代原来的逻辑,有两种简单可靠的方案:
方案一:直接判断URL前缀
这是最简洁的方式,和原LdapURL.useSsl()的逻辑完全对齐——原方法本质就是判断URL是否以ldaps://开头(对应LDAPS协议,直接通过SSL连接):
if (ldapDomain.startsWith("ldaps://")) { profiles.add("secure-LDAP"); } else { profiles.add("non-secure-LDAP"); }
方案二:使用标准URL类解析(更严谨)
如果需要更严谨地处理URL格式(比如避免误判类似xldaps://这种非法前缀),可以用Java标准库的java.net.URL来解析协议部分:
import java.net.MalformedURLException; import java.net.URL; // ... try { URL url = new URL(ldapDomain); if ("ldaps".equals(url.getProtocol())) { profiles.add("secure-LDAP"); } else { profiles.add("non-secure-LDAP"); } } catch (MalformedURLException e) { // 处理非法LDAP URL的情况,这里按业务需求默认标记为非安全 profiles.add("non-secure-LDAP"); // 也可以根据需要抛出异常或记录日志 // e.printStackTrace(); }
注意事项
原LdapURL.useSsl()不会区分StartTLS场景(即普通ldap://协议通过StartTLS升级为安全连接),如果你的业务需要覆盖这种情况,需要额外解析URL中的扩展参数(比如?starttls=yes),但这超出了原代码的逻辑范围。
内容的提问来源于stack exchange,提问作者RaT
相关产品推荐
相关产品推荐

