Java LDAP统一身份认证

不多说直接看代码,如下:importjava.util.Hashtable;importjavax.naming.AuthenticationException;importjavax.naming.Context;importjavax.naming.NamingEnumeration;importjavax.naming.NamingException;import…

大家好,又见面了,我是你们的朋友全栈君。

不多说直接看代码,如下:

import java.util.Hashtable;

import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

/**
 * 用户登陆认证,LDAP跨域认证,通过LDAP对用户进行更新
 * 
 */
public class LdapCheck {

    private static LdapContext ctx = null;
    private static Control[] connCtls = null;

    /**** 定义LDAP的基本连接信息 ******/
    // LDAP的连接地址(ldap://ip:port/)port默认为389
    private static String URL = “?”;
    // LDAP的根DN
    private static String BASEDN = “dc=?,dc=?,dc=?”;
    // LDAP的连接账号(身份认证管理平台添加的应用账号,应用账号格式:uid=?,ou=?,dc=????)
    private static String PRINCIPAL = “uid=?,ou=?,dc=?,dc=?,dc=?”;
    // LDAP的连接账号的密码(身份认证管理平台添加的应用账号的密码)
    private static String PASSWORD = “?”;

    public static void main(String[] args) {

        // 登录用户的用户名和密码
        String username = “?”;
        String password = “?”;
        System.out.println(authenticate(username, password));
        closeCtx();
    }

    // 校验用户名密码的方法
    public static boolean authenticate(String usr, String pwd) {

        boolean valide = false;
        if (pwd == null || pwd == “”)
            return false;
        if (ctx == null) {

            getCtx();
        }
        String userDN = getUserDN(usr);
        if (“”.equals(userDN) || userDN == null) {

            return false;
        }
        try {

            ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
            ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
            ctx.reconnect(connCtls);
            valide = true;
        } catch (AuthenticationException e) {

            System.out.println(userDN + ” is not authenticated”);
            System.out.println(e.toString());
            valide = false;
        } catch (NamingException e) {

            System.out.println(userDN + ” is not authenticated”);
            valide = false;
        }
        return valide;
    }

    public static void getCtx() {

        if (ctx != null) {

            return;
        }
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”);
        env.put(Context.PROVIDER_URL, URL + BASEDN);
        env.put(Context.SECURITY_AUTHENTICATION, “simple”);
        env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL);
        env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
        try {

            // 链接ldap
            ctx = new InitialLdapContext(env, connCtls);
        } catch (javax.naming.AuthenticationException e) {

            System.out.println(“Authentication faild: ” + e.toString());
        } catch (Exception e) {

            System.out.println(“Something wrong while authenticating: ” + e.toString());
        }
    }

    public static void closeCtx() {

        try {

            if (ctx != null)
                ctx.close();
        } catch (NamingException ex) {

        }
    }

    public static String getUserDN(String uid) {

        String userDN = “”;
        try {

            SearchControls constraints = new SearchControls();
            constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
            NamingEnumeration<?> en = ctx.search(“”, “uid=” + uid, constraints);
            if (en == null) {

                System.out.println(“Have no NamingEnumeration.”);
            }
            if (!en.hasMoreElements()) {

                System.out.println(“Have no element.”);
            }
            while (en != null && en.hasMoreElements()) {

                Object obj = en.nextElement();
                if (obj instanceof SearchResult) {

                    SearchResult si = (SearchResult) obj;
                    userDN += si.getName();
                    userDN += “,” + BASEDN;
                } else {

                    System.out.println(obj);
                }
                System.out.println();
            }
        } catch (Exception e) {

            System.out.println(“Exception in search():” + e);
        }

        return userDN;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125729.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime text3激活码(注册激活)

    (sublime text3激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    250
  • zlc源码-众利模式 全新黑金UI客户运营版:仅供学习使用「建议收藏」

    zlc源码-众利模式 全新黑金UI客户运营版:仅供学习使用「建议收藏」本源码是目前众利模式的最新ZLC源码!请勿用作其他非法运营!可以学习使用!用作非法用途一切都与本人无关!联系QQ:19198367联系QQ:19198367特别声明:此源码仅供学习使用,请勿用作非法用途!产生一切法律相关责任请自行承担!…

    2022年5月28日
    33
  • 雅典娜暴利烹饪系列(下)「建议收藏」

    雅典娜暴利烹饪系列(下)「建议收藏」”呀–呀–呀–“爬到冰箱上的纱织吓的花容失色,”快点把那些土鳖拿开啦—-“端着一盆螃蟹的迪马斯头上好几个”加号”:”你叫个什么劲呀!!!不是你要学煮螃蟹,叫我下河给你捞的吗?!!这是螃蟹!!!螃蟹!!!!”纱织眼睛里无辜的泪水在打转:”骗人!螃蟹明明是红色的~~~””那是煮熟的好不好!!!”迪马斯已经在昏倒的边缘,”快拿去!!!””不要呀~~~~好可怕呀~~~~~”玉手一挥,螃蟹

    2022年7月11日
    19
  • tomcat java_maven和tomcat的关系

    tomcat java_maven和tomcat的关系缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

    2022年8月8日
    6
  • img图片加载失败?

    img图片加载失败?问题场景在工作中经常会使用标签进行图片展示,但是经常有图片加载失败的情况发生(图片地址不存在、图片已经删除等)。场景再现图片加载失败时的用户体验是很不好的。虽然标签有alt属性可以展示文本,但是用户体验依然差。代码:&amp;amp;amp;amp;amp;amp;lt;imgalt=&amp;amp;amp;amp;amp;quot;头像&amp;amp;amp;amp;amp;quot;src=&amp;amp;amp;amp;amp;quot;$

    2022年6月2日
    50
  • navicat2021激活码【2021最新】

    (navicat2021激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    198

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号