系统需求需要对接客户方的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登录操作相关推荐

  1. Java AD域登录实现正常本地登录操作

    Java 域登录 实现 前言 新建一个测试类 AD域的userName和passWord身份验证成功之后返回 身份验证失败之后返回 验证成功后将之代入项目登录的位置,根据自己的登录接口和登陆逻辑来修改 ...

  2. 在 Java CAPS 中使用 LDAP

    http://docs.oracle.com/cd/E19509-01/820-5624/ggfpv/index.html http://docs.oracle.com/cd/E19509-01/82 ...

  3. java package com.xq.algorithm,登录模块的进化史,带大家回顾java学习历程(一)

    一直在想着写点特别点的东西,让有兴趣学编程的人确实能学到点干货,今天就来随意写写. 大家在网上查找资料看到最多的demo估计就是登录功能的演示了,为何大家偏爱拿登录来做demo呢?因为行业应用类程序的 ...

  4. Lotus的JAVA与DOMINO通过LDAP集成方法

    Lotus的JAVA与DOMINO通过LDAP集成方法! JAVA, DOMINO, Lotus, LDAP 摘要:LDAP是标准轻量目录访问协议(Lightweight Directory Acce ...

  5. java 登陆系统设计_Java 程序设计——登录系统

    并发型服务器 博客展示的登录系统的服务器端,将实现重复型服务器. Client–server model 客户端-服务器模型(Client–server model)简称C/S结构,是一种网络架构.大 ...

  6. 学生管理系统:含注册登录操作

    目录 一.分包概况: 二.USER包 1.AMain类:主函数所在 2.User类:构造账号属性 3.PasswordOperate包:用于登录,注册,修改密码,查看账号操作 (1)Login类:登录 ...

  7. Java图形界面开发—简易登录注册小程序

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...

  8. Java学生信息管理系统——管理员登录模块(简单易上手)

    前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...

  9. 如何使用Java实现类似Windows域登录

    什么是域登录? 域登录是一种集中式身份验证和授权方法,用于访问企业内部网络和资源.在Windows环境中,域是一组计算机和用户帐户的集合,受到单个安全管理的控制.域登录允许用户在访问域资源时使用单个帐 ...

最新文章

  1. Java基础学习总结(21)——数组
  2. VC++对话框学习总结
  3. 51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...
  4. 深度学习入门:10门免费线上课程推荐
  5. 解决使用adprep升级windows2003/win2008/win2012域时遇到的问题
  6. 大胆尝试随需消费的软件培训模式
  7. freeswitch录音功能
  8. python excel 颜色填充 excel样式
  9. GAMS系列分享13——综合能源系统——包含储能的单能源枢纽模型
  10. Python eval()和exec()函数详解
  11. 百度地图API之根据经纬度查询地址信息(Android) .(10)
  12. O2O新猜想:如果商家这样做,还需要团购平台吗
  13. 安卓APP自动更新功能实现
  14. 刚入门的自媒体人,也能给视频配上好听的声音
  15. 《DRM 专栏》| 彻底入门 DRM 驱动
  16. ES GEO地理空间查询java版
  17. 三小时,破解数据库智能管控中的奥秘
  18. HX711 24位A/D模块计算公式
  19. 光猫linux网桥桥接,把光猫改成桥接,用路由器PPPOE拨号
  20. html5验证电子邮件地址,大家都知道如何吗?

热门文章

  1. [HIS] HIT行业常用名词及缩写定义
  2. jeesite解决跨域问题
  3. TCP长连接与NAT超时
  4. python格式化输出多个变量_Python变量的格式化输出
  5. 小数右侧补0,整数左侧补0 c++
  6. 详述使用pytest-ordering控制用例执行顺序
  7. ClickOnce是什么?如何使用?
  8. Java获取时间与Linux不一致
  9. 优秀课件笔记旅游资源和旅游地评价 Evaluation of Tourism Resources 2
  10. python多维数组排序算法_python 多维数组的排序