AD域验证 java

起因:

客户说要弄一个单点登录,聊到最后实现方式是这种:
时序图

经过:

一系列的cvcvcvcvcv:

 public static boolean connect(String host, String post, String username, String password) {

        log.info("host,{},post,{},username,{},password,{}", host, post, username, password);
        DirContext ctx = null;
        Hashtable<String, String> HashEnv = new Hashtable<String, String>();
        // LDAP访问安全级别(none,simple,strong)
        HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
        //AD的用户名
        HashEnv.put(Context.SECURITY_PRINCIPAL, username);
        //AD的密码
        HashEnv.put(Context.SECURITY_CREDENTIALS, password);
        // LDAP工厂类
        HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        //连接超时设置为3秒
        HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");
        // 默认端口389
        HashEnv.put(Context.PROVIDER_URL, "ldap://" + host + ":" + post);
        try {
            // 初始化上下文
            ctx = new InitialDirContext(HashEnv);
            log.info("身份验证成功 !");
            return true;
        } catch (AuthenticationException e) {
            log.error("身份验证失败 !");
            log.error(e.getMessage(), e);
            return false;
        } catch (javax.naming.CommunicationException e) {
            log.error("AD域连接失败 !");
            log.error(e.getMessage(), e);
            return false;
        } catch (Exception e) {
            log.error("身份验证未知异常 !");
            log.error(e.getMessage(), e);
            return false;
        } finally {
            if (null != ctx) {
                try {
                    ctx.close();
                    ctx = null;
                } catch (Exception e) {
                    log.error(e.getMessage(), e);
                }
            }
        }
    }

结果:

客户说默认端口389不行,得636;
我百度了下389是只能执行查询操作,636增删改查都可以.

我心里肯定不服啊,妈的,老子就是去执行查询来验证下当前用户是否存在即可,搞几把那么复杂干嘛???

但是本着客户是上帝的原则,我又开始了百度…(soon later);

结果02:

636端口是需要使用证书的, 那么问题来了, 证书从哪里搞???

按照我以往的经验,证书在浏览器里面是可以下载的, but 是需要访问网站的哇. 这几把怎么搞出来证书???

好了,马上6点该下班了,今天就先到这里吧.


2020.09.25
圈里一哥们做过这种ldap的客户对接,说他那个证书是客户提供的.
我问了我的客户,一问三不知的,索性不弄证书了,用默认端口了.
客户那改主意了,他们不想暴露ip到公网,所以 这个ldap的不做了.
欧耶!!!

猜你喜欢

转载自blog.csdn.net/weixin_43555115/article/details/108737517