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;
    }
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]

    一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]大家好,我是帅地。对于约瑟夫环问题估计大家都听说过,除非你刚刚读大一,因为在大一大部分学校的课本都会降到这个算法题。为了以防万一你没听过,我还是给下问题的描述问题描述:编号为1-N的N个士兵围坐在一起形成一个圆圈,从编号为1的士兵开始依次报数(1,2,3…这样依次报),数到m的士兵会被杀死出列,之后的士兵再从1开始报数。直到最后剩下一士兵,求这个士兵的编号。记得有一次,貌似是阿里的面试,面试官给了我一到原汁原味的约瑟夫好,好家伙,看我不把你秀一把。不过,作为一个有着几十场面

  • linux系统添加静态路由命令_静态路由和默认路由小结

    linux系统添加静态路由命令_静态路由和默认路由小结linux下静态路由修改命令方法一:添加路由routeadd-net192.168.0.0/24gw192.168.0.1routeadd-host192.168.1.1dev192.168.0.1删除路由routedel-net192.168.0.0/24gw192.168.0.1add增加路由del删除路由-net设置到某个网段的路由-host设置到某台主…

  • webstrom激活码【中文破解版】

    (webstrom激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html0E14HXZ4QL-eyJsaWN…

  • python做微信回复机器人_python聊天机器人代码

    python做微信回复机器人_python聊天机器人代码下面这个小文章适合初学Python的童鞋哦~~~一个很好用的微信库:itchat拿使用图灵机器人设置自动回复,让机器人跟微信好友傻傻的聊天,机器人比小编还会聊天,无论是对美眉还是汉纸,上来就是爱!爱!爱!简直太辣眼睛!!!用它进行来调戏微信好友,简直6的一笔!(记住一条!千万不能对女票使用,遭遇一万点伤害)好啦,下面就来一起看一下如何使用吧!使用工具:itchat,req…

  • 自然语言处理 模型_CD模型

    自然语言处理 模型_CD模型CBOW一个用于快速训练得到词向量的神经网络模型,它的核心原理是中心词的前R个词和后R个词来预测中心词。它的网络模型相比NNLM模型来说,最大的变化是直接去除隐层的非线性激活过程,以此来加速网络的训练速度。CBOW的输入:假设中心词wiw_{i}wi​的上下文C(wi)={wj∣j∈[i−R,i)∩[i+1,i+R)}C(w_{i})=\{w_{j}|j\in[i-R,i)\cap[…

  • linux(11)配置环境变量「建议收藏」

    linux(11)配置环境变量「建议收藏」前言在自定义安装软件的时候,经常需要配置环境变量,下面进行详细解析&nbsp;环境变量配置文件|用户|配置文件||:|:||系统环境|/ect/profil

发表回复

您的电子邮箱地址不会被公开。

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