为什么80%的码农都做不了架构师?>>>   

一、用户认证

public String execute(){Hashtable env = new Hashtable();String LDAP_URL = "ldap://8.8.8.8:389"; // LDAP访问地址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);env.put(Context.SECURITY_CREDENTIALS, password);try {dc = new InitialDirContext(env);// 初始化上下文// 域节点String searchBase = "DC=abc,DC=com";String searchFilter = "cn="+username;SearchControls searchCtls = new SearchControls(); // Create thesearchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify//设置查询的属性,根据登陆用户姓名获取ouString returnedAtts[] = {"distinguishedName"};// 定制返回属性searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集// 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果NamingEnumeration<SearchResult> entries = dc.search(searchBase, searchFilter,searchCtls);SearchResult entry = entries.next();Attributes attrs = entry.getAttributes();String disName = attrs.get("distinguishedname").toString();String[] disNameArray = disName.split(":");String distinguishedname = disNameArray[1].trim();//设置sessionsession.put("distinguishedname", distinguishedname);//认证成功,返回successSystem.out.println("认证成功");//这里可以改成异常抛出。return "success";} catch (javax.naming.AuthenticationException e) {System.out.println("认证失败");return "fail";} catch (Exception e) {System.out.println("认证出错:" + e);return "fail";}
}

二、修改用户密码

用户认证是相对比较简单的,简单几行代码即可,微软是不允许直接通过java修改密码(C#除外),我们就需要用到证书。

1、在AD域服务器上,添加角色 证书服务器,点这里。

2、在IE中,Internate选项->内容->证书->找到自己的证书然后导出。

3、导出的证书,需要导入到一个文件里,这个文件叫cacerts.这个文件在,还需要一个工具keytools.exe。位置:

cacerts : D:\soft\myeclipse2013\binary\com.sun.java.jdk.win32.x86_64_1.6.0.u43\jre\lib\security

keytools : D:\soft\myeclipse2013\binary\com.sun.java.jdk.win32.x86_64_1.6.0.u43\bin

我们需要通过keytools工具,把导出的证书导入到cacerts里,导入的方法是在DOS命令里输入:

D:\soft\myeclipse2013\binary\com.sun.java.jdk.win32.x86_64_1.6.0.u43\bin\keytool -import -keystore D:\soft\myeclipse2013\binary\com.sun.java.jdk.win32.x86_64_1.6.0.u43\jre\lib\security\cacerts -storepass changeit -keypass changeit -alias ca -file D:\ca\ca.cer

复制到dos,回车后提示是否导入,输入“y”即可。这些都做完就该我们的编码了:

public void editPwd() throws NamingException {this.setNewPwd(new String(decode(newPwd)));this.setConfirmPwd(new String(decode(confirmPwd)));//ajax请求的一些代码HttpServletResponse response=ServletActionContext.getResponse();response.setContentType("text/html; charset=utf-8");  Map<String, Object> m = new HashMap<String, Object>();//校验两次输入的密码是否一致if(!newPwd.equals(confirmPwd)){m.put("success", false);m.put("msg", "两次密码输入不一致,请重新输入。");JSONArray jsonArray = JSONArray.fromObject(m);try {PrintWriter out = response.getWriter();out.print(jsonArray.toString());} catch (IOException e) {e.printStackTrace();}}//ladp的一些配置Hashtable env = new Hashtable();   String adminName = "sja\\administrator";String adminPassword = "p@ssword";String userName = session.get("distinguishedname").toString().replace("%20", " ");String newPassword = newPwd;String keystore = this.getClass().getResource("").toString().substring(6).replace("%20", " ").replace("/", "\\")+"cacerts";System.setProperty("javax.net.ssl.trustStore",keystore);env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION,"simple");   env.put(Context.SECURITY_PRINCIPAL,adminName);   env.put(Context.SECURITY_CREDENTIALS,adminPassword);   env.put(Context.SECURITY_PROTOCOL,"ssl");   String ldapURL = "ldap://8.8.8.8:636";   env.put(Context.PROVIDER_URL,ldapURL);   try {   PrintWriter out = response.getWriter();//初始化ldapcontextLdapContext ctx = new InitialLdapContext(env,null);ModificationItem[] mods = new ModificationItem[1];String newQuotedPassword = "\"" + newPassword + "\"";   byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");   mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));   // 修改密码ctx.modifyAttributes(userName, mods);   System.out.println("Reset Password for: " + userName);     ctx.close();   m.put("success", true);JSONArray jsonArray = JSONArray.fromObject(m);out.print(jsonArray.toString());}    catch (NamingException e) {   System.out.println("Problem resetting password: " + e);m.put("success", false);m.put("msg", "密码不符合要求或网络连接错误,请尝试重新输入密码或联系管理员。");JSONArray jsonArray = JSONArray.fromObject(m);PrintWriter out;e.printStackTrace();try {out = response.getWriter();out.print(jsonArray.toString());} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
}

代码写的非常的烂,只是简单的实现了功能,希望大家多拍砖。

java对AD域的密码修改!!证书导入!!!

Java通过Ldap操作AD的增删改查询

有问题可以留言。

转载于:https://my.oschina.net/qiaojj/blog/494556

用java进行LDAP用户登陆(用户认证)及修改密码相关推荐

  1. 允许用户在web Interface上修改密码

    允许用户在web Interface上修改密码 环境:windows server 2008 R2  (已加入域).  xenapp6(已安装了xenapp服务器和web interface) 打开C ...

  2. 服务器怎么修改密码_亚马逊账号登陆不上,修改密码后遭冻结怎么办?有没有什么申诉的办法?...

    有微信上的小伙伴chen非常焦急的向我求助因为账号被封,全部家当基本都在账号里边,并且向我说明了基本情况. 情况是这样的,账号被冻结前两天她公司停电,所以她用VPS远程登录了账号,然后亚马逊就锁定了她 ...

  3. 重庆思庄oracle技术分享- 数据库用户登陆过期,如何修改登陆时限

    在Oracle数据库中,可以通过修改用户的密码过期时间来修改用户的登陆时限.以下是在Oracle数据库中修改用户登陆时限的步骤: 1.以系统管理员身份登录到Oracle数据库. sqlplus /no ...

  4. oracle创建目录并赋权,Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法...

    添加用户(随着用户的创建,自动产生与用户同名的schema) CREATE USER "TESTER" PROFILE "DEFAULT" IDENTIFIED ...

  5. 实现用户端的充值、修改密码、查看个人信息、保存用户的信息到文件操作

    目录 话不多说直接先上源码 用户类User 核心部分:添加用户到文件中 添加用户的操作 User类 展示个人信息(包括历史充值记录) 修改密码操作 实现修改密码界面 充值操作 实现充值界面 充值后再次 ...

  6. 用户第一次登录后要求修改密码

    对于linux管理员而言,一些开发人员在便于排查故障时候需要服务器的登录权限,除了网络权限开放外,第二道防线就是服务器的用户登录权限,,而开发人员的安全意识单薄下,需要进一步保护普通用户的登录权限,因 ...

  7. linux用户随机密码,Linux 生成随机密码/修改密码

    Linux生成随机密码方式: strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d 'n'; echo Linux修改密码 ...

  8. java连接ldap验证,验证用户使用LDAP登录

    我无法使用LDAP成功验证ASP.NET Web应用程序的用户 . 我已经在我们自己的网络上针对Active Directory这样做了,但这是针对我们网络之外的服务器,即OID(Oracle Int ...

  9. python用户登陆程序 要求用户名和密码_python开发基础作业01:模拟登陆系统

    随老男孩学习python mark 作业要求及提示:编写登录接口 ''' 练习程序:编写登录接口 1. 输入用户名和密码 2. 认证成功后显示欢迎信息 3. 输错三次后锁定 输入三次后退出,下次同样用 ...

  10. Python3 实现用户登陆,输入三次密码

    不加注释版 #/usr/bin/python3 import readline user = "seven" passwd = "123" username = ...

最新文章

  1. COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)
  2. 最近为一个培训公司做的配置
  3. (十)HTTP协议【前后端分离的时代,网络请求是前端的生命线】
  4. Flask学习之旅--数据库
  5. 软件工程测试旅游管理系统,旅游管理系统的设计与实现
  6. 2017年5月24日 HTML 基础知识(二)
  7. 阿里云云计算 12 对象存储 Object Storage Service OSS 的概念
  8. spline: 计算机曲线简史(转载)
  9. 怎么查看计算机mac地址,怎么查电脑的mac地址?电脑mac地址查询方法
  10. 给马云、马化腾订制旅行,这家公司想做旅游行业的“得到”
  11. 超详细教程:YOLO_V3(yolov3)训练自己的数据
  12. 罗马建立在水渠上:为什么需要优先建设绿色光网?
  13. SylixOS动态内存分配操作
  14. Pandas-时间(二)-数据类型:DatetimeIndex(其中每个元素的类型为:Timestamp)【创建方式:①pd.DatetimeIndex([]);②pd.to_datetime()】
  15. time_t、SYSTEMTIME、CTime、COleDateTime互转
  16. compiti delle vacanze 暑假作业
  17. Pytorch:一些常用代码
  18. 一坑未平一坑又起——圆锥曲线1-1 椭圆的定义中的东西
  19. X3650M5更换主板后无法正常进系统的原因
  20. Symbian 开发简介

热门文章

  1. IDEA 删除Module
  2. echarts 选中bush中lineX
  3. 2017年4月19日
  4. 使用TI 的低功耗C5x DSP的指纹识别方框图和解决方
  5. C# 之 Math取整
  6. SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行)
  7. C++ Primer 小贴士之第一二章
  8. 利用C#实现标准的 Dispose模式
  9. C#中5步完成word文档打印的方法
  10. MFC GDI绘图基础