当前位置: 首页 > news >正文

【Java实战】Java集成AD域账号登录

目的:

JAVA集成域账号登录的实现方案,通过LDAPUtil类实现对AD域的身份验证。系统采用双域服务器配置,支持主备切换。

关键点包括:

1) LDAP连接参数配置;

2) 区分管理员账号和普通域账号的双重验证机制,管理员通过本地数据库验证,其他用户通过AD域验证;

3) 完善的异常处理机制。该方案实现了企业级统一身份认证,同时保留了本地管理员账号的特殊处理逻辑。代码片段展示了完整的认证流程,包括LDAP连接建立、密码验证及资源释放等关键环节。

public class LDAPUtil { // private static final String LDAP_URL = "ldap://XXXXXXX:389";//主域 private static final String LDAP_URL = "ldap://XXXXXXX:389";//辅域 // private static final String LDAP_URL = "ldap://XXXXXXX:389";//域名 private static final String USER_EMAIL = "@XXXXXXX.com"; /** * LdapContext 验证身份 * * @param username * @param password * @return * @throws NamingException */ public static LdapContext getLdapContext(String username, String password) throws NamingException { //创建连接 Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, LDAP_URL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, username + USER_EMAIL); env.put(Context.SECURITY_CREDENTIALS, password); return new InitialLdapContext(env, null); } }

修改登录验证,排除admin管理员账号

//update-start--Author:wangyuhuang Date:20230615 fro:管理员账号验证账号密码,其他用户验证域账号 //2. 验证是否是管理员账号 if (username.equals("admin")) { //2-1. 校验用户名或密码是否正确 String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); String syspassword = sysUser.getPassword(); if (!syspassword.equals(userpassword)) { result.error500("用户名或密码错误"); return result; } } else { //2-1. 域账号身份验证 LdapContext lct = null; try { // 连接 验证身份 lct = LDAPUtil.getLdapContext(username, password); } catch (AuthenticationException e) { System.out.println("账号或密码错误!"); } catch (CommunicationException e) { System.out.println("AD域连接失败!"); e.printStackTrace(); } catch (Exception e) { System.out.println("身份验证未知异常!"); e.printStackTrace(); } finally { if (null != lct) { try { lct.close(); lct = null; } catch (Exception e) { e.printStackTrace(); } } else { result.error500("用户名或密码错误"); return result; } } } //update-end--Author:wangyuhuang Date:20230615 fro:管理员账号验证账号密码,其他用户验证域账号
http://www.jsqmd.com/news/472644/

相关文章:

  • ES 处理索引数据变动的原理剖析
  • 【OS】进程等待-就绪态分析及原语-事务对比
  • 减速电机 手指气缸 直线导轨规格尺寸图
  • 基于QT对UR3进行开发
  • 河北省雄安新区(马蹄湾村)航空高光谱遥感应用数据集下载
  • 【人工智能】少样本学习/提示(Few-shot Learning/Prompting),这种能力模仿了人类的学习方式,即我们通常不需要大量的例子来学习新事物或识别新的物体
  • 大卫三角形法(canvas)和立体图示法(echarts)实现
  • Kafka 高吞吐量的原因是什么?
  • CCV 开源项目使用教程
  • Kafka 如何调优?
  • go协程奇偶打印和交替打印ABC
  • 探索ccv:一个轻量级且功能强大的计算机视觉库
  • KCD Beijing + vLLM 2026 全议程公布:30+ 技术分享,AI × 云原生 × vLLM 一次看够
  • Kafka 如何解决消息堆积问题?
  • 腾讯AI布局:QClaw登场,元宝何去何从?
  • Android开发者必备:TooLargeTool日志分析实战教程
  • 【亲测免费】 mergerfs 项目使用教程
  • 汇智信科-飞行讲评系统
  • AI应用新趋势:中国崛起与全球市场割裂
  • 项目推荐:Stable Diffusion WebUI Colab
  • Kafka 消息堆积的原因有哪些?
  • 微软Copilot惨败,Anthropic能救场吗?
  • Logstash:强大的数据处理管道,助力日志管理与分析
  • 2024年必收藏的开发者资源:dev-resources精选工具TOP50
  • 2026年广东AI智能测试标杆厂家最新推荐:AI智能信创测试公司、AI智能测试管理公司、AI智能自动化测试公司、AI智能性能测试公司、AI智能接口测试公司广州掌动智能 - 海棠依旧大
  • AI短剧来袭:真人剧会被全面替代吗?
  • 别再乱用ScrollViewer了!WPF滚动容器与布局控件的正确搭配指南
  • 深入理解粤语编程编译器:从Python转换到LLVM执行
  • Symfony Translation终极指南:构建React+Capacitor跨平台多语言应用
  • Makefile实战:如何用5分钟搞定动态库(.so)的自动化编译与调用