Java记一次ldap登录操作
系统需求需要对接客户方的ldap服务器,仅作为登录使用,不需要获取信息。
配置项:
# ldap
ldap:# 服务地址host: xx.xx.xx.xx# 服务端口port: 9999# searchBase: DC=搜索域,DC=com # 搜索域节点 仅登录不使用该配置# searchFilter: cn # 搜索的属性 仅登录不使用该配置suffix: "@xxx.com" # 域账号后缀
实现方法:
@Value("${ldap.host}")private String ldapHost;@Value("${ldap.port}")private String ldapPort;@Value("${ldap.suffix}")private String ldapSuffix;public String ldapLogin(LoginUserAO loginUserAO,HttpServletRequest httpServletRequest){// 获取用户名密码String username = loginUserAO.getUsername();String password = loginUserAO.getPassword();log.info(">>ldap-登录开始..");// 检测配置if (StringUtils.isEmpty(ldapHost) || StringUtils.isEmpty(ldapPort) || StringUtils.isEmpty(ldapSuffix)){log.error("ldap-登录失败,ldap配置异常;ldapHost:{}, ldapPort:{}, ldapSuffix:{}",ldapHost, ldapPort, ldapSuffix);throw new BusinessException("ldap登录失败,ldap配置异常");}// ldap URLfinal String ldapURL = "ldap://" + ldapHost + ":" + ldapPort;// 检测用户名是否带后缀,不带则加上if (!username.endsWith(ldapSuffix)) {username = username + ldapSuffix;}log.info("{} access ldap :{} ", username, ldapURL);Hashtable env = new Hashtable();LdapContext ldapContext = null;env.put(Context.SECURITY_AUTHENTICATION, "simple");env.put(Context.SECURITY_PRINCIPAL, username);env.put(Context.SECURITY_CREDENTIALS, password);env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL, ldapURL);/**ldap登录,如果有异常说明登录失败*/try {// 获取ldap链接,获取成功即登录验证成功ldapContext = new InitialLdapContext(env, null);log.info("ldapContext:" + ldapContext);// 去除用户名后缀if (username.endsWith(ldapSuffix)) {username = username.substring(0,username.indexOf(ldapSuffix));}// 获取并验证用户信息LoginUser loginUser = (LoginUser)userDetailsService.loadUserByUsername(username);// 生成令牌String token = tokenService.createToken(loginUser);return token;} catch (AuthenticationException e) {log.error("域登录身份验证失败");e.printStackTrace();throw new BusinessException("域登录身份验证失败");} catch (javax.naming.CommunicationException e) {log.error("ldap域连接失败");e.printStackTrace();throw new BusinessException("ldap域连接失败");} catch (Exception err) {log.error("异常信息未知");err.printStackTrace();throw new BusinessException("异常信息未知");} finally {if (null != ldapContext) {try {ldapContext.close();} catch (Exception e) {log.error("InitialDirContext 关闭异常..");e.printStackTrace();}}}}
大功告成!
Java记一次ldap登录操作相关推荐
- Java AD域登录实现正常本地登录操作
Java 域登录 实现 前言 新建一个测试类 AD域的userName和passWord身份验证成功之后返回 身份验证失败之后返回 验证成功后将之代入项目登录的位置,根据自己的登录接口和登陆逻辑来修改 ...
- 在 Java CAPS 中使用 LDAP
http://docs.oracle.com/cd/E19509-01/820-5624/ggfpv/index.html http://docs.oracle.com/cd/E19509-01/82 ...
- java package com.xq.algorithm,登录模块的进化史,带大家回顾java学习历程(一)
一直在想着写点特别点的东西,让有兴趣学编程的人确实能学到点干货,今天就来随意写写. 大家在网上查找资料看到最多的demo估计就是登录功能的演示了,为何大家偏爱拿登录来做demo呢?因为行业应用类程序的 ...
- Lotus的JAVA与DOMINO通过LDAP集成方法
Lotus的JAVA与DOMINO通过LDAP集成方法! JAVA, DOMINO, Lotus, LDAP 摘要:LDAP是标准轻量目录访问协议(Lightweight Directory Acce ...
- java 登陆系统设计_Java 程序设计——登录系统
并发型服务器 博客展示的登录系统的服务器端,将实现重复型服务器. Client–server model 客户端-服务器模型(Client–server model)简称C/S结构,是一种网络架构.大 ...
- 学生管理系统:含注册登录操作
目录 一.分包概况: 二.USER包 1.AMain类:主函数所在 2.User类:构造账号属性 3.PasswordOperate包:用于登录,注册,修改密码,查看账号操作 (1)Login类:登录 ...
- Java图形界面开发—简易登录注册小程序
登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...
- Java学生信息管理系统——管理员登录模块(简单易上手)
前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...
- 如何使用Java实现类似Windows域登录
什么是域登录? 域登录是一种集中式身份验证和授权方法,用于访问企业内部网络和资源.在Windows环境中,域是一组计算机和用户帐户的集合,受到单个安全管理的控制.域登录允许用户在访问域资源时使用单个帐 ...
最新文章
- Java基础学习总结(21)——数组
- VC++对话框学习总结
- 51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...
- 深度学习入门:10门免费线上课程推荐
- 解决使用adprep升级windows2003/win2008/win2012域时遇到的问题
- 大胆尝试随需消费的软件培训模式
- freeswitch录音功能
- python excel 颜色填充 excel样式
- GAMS系列分享13——综合能源系统——包含储能的单能源枢纽模型
- Python eval()和exec()函数详解
- 百度地图API之根据经纬度查询地址信息(Android) .(10)
- O2O新猜想:如果商家这样做,还需要团购平台吗
- 安卓APP自动更新功能实现
- 刚入门的自媒体人,也能给视频配上好听的声音
- 《DRM 专栏》| 彻底入门 DRM 驱动
- ES GEO地理空间查询java版
- 三小时,破解数据库智能管控中的奥秘
- HX711 24位A/D模块计算公式
- 光猫linux网桥桥接,把光猫改成桥接,用路由器PPPOE拨号
- html5验证电子邮件地址,大家都知道如何吗?