博客地址 http://blog.csdn.net/foxdave

本文将说明一个简单的重置SharePoint用户密码(NTLM Windows认证)的功能如何实现

重置密码功能,实际上就是重置域用户密码的功能,其实很简单。

解决方案结构如下图所示:

1. 创建SharePoint空解决方案。

2. 添加一个空元素,命名为ResetPassword,并将随之生成的Feature也一并修改,范围选择Site。

3. 我们想将重置密码的功能添加到用户菜单下,所以在空元素的Emlements.xml中,填写如下定义:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/"><CustomActionId="{97526618-3FA0-4117-9882-9A1127C56687}"Title="重置用户密码"Description="重置用户密码"Sequence="1003"Location="Microsoft.SharePoint.StandardMenu"GroupId="PersonalActions"ImageUrl=""Rights="EditListItems"><UrlAction Url="_layouts/ResetPassword/ResetPassword.aspx"/></CustomAction>
</Elements>

定义的具体说明参阅“CustomAction Element”。

4. 添加Layous映射文件夹,其下的文件夹命名为ChangePassword,添加应用程序页。

对应用程序页进行编辑,添加必要的控件如要重置的用户名文本框、重置确认按钮、消息提示控件等。

前台页面:

<asp:Literal ID="ltMsg" EnableViewState="false" runat="server"></asp:Literal><div><h3><span>重置密码</span></h3><table width="400px"><tr><td>用户名</td><td>:</td><td><asp:TextBox ID="txtUser" runat="server"></asp:TextBox></td></tr><tr><td colspan="3" align="center"><br /><asp:Button ID="btnResetPwd" runat="server" Text="重置密码" OnClick="btnResetPwd_Click" /></td></tr></table><br /><br /></div>

后台核心代码:

protected void btnResetPwd_Click(object sender, EventArgs e){if (this.txtUser.Text.Trim().Equals("admin")){this.ltMsg.Text = "管理员密码不能重置";return;}ResetPwd(this.txtUser.Text, "123456");}private void ResetPwd(string userName, string password){try{SPSecurity.RunWithElevatedPrivileges(delegate(){var directoryEntry = GetDirectoryEntryByUserName(userName);if (directoryEntry == null){this.ltMsg.Text = "未找到该用户";return;}directoryEntry.Invoke("SetPassword", new object[] { password });directoryEntry.Properties["LockOutTime"].Value = 0;directoryEntry.Close();directoryEntry.Dispose();this.ltMsg.Text = userName + "的密码已经重置为123456";});}catch (Exception e){this.ltMsg.Text = "发生错误,请联系管理员:\r\n" + e.ToString();}}private DirectoryEntry GetDirectoryEntryByUserName(string userName){var de = GetDirectoryObject(GetDomain());var deSearch = new DirectorySearcher(de) { SearchRoot = de, Filter = "(&(objectCategory=user)(samAccountName=" + userName + "))" };var results = deSearch.FindOne();return results != null ? results.GetDirectoryEntry() : null;}private string GetDomain(){//string adDomain = WebConfigurationManager.AppSettings["adDomainFull"];string adDomain = "contoso.com";var domain = new StringBuilder();string[] dcs = adDomain.Split('.');for (var i = 0; i < dcs.GetUpperBound(0) + 1; i++){domain.Append("DC=" + dcs[i]);if (i < dcs.GetUpperBound(0)){domain.Append(",");}}return domain.ToString();}private DirectoryEntry GetDirectoryObject(string domainReference){string adminUser = "admin";//WebConfigurationManager.AppSettings["adAdminUser"];string adminPassword = "contosopwd";//WebConfigurationManager.AppSettings["adAdminPassword"];string fullPath = "LDAP://" + domainReference;var directoryEntry = new DirectoryEntry(fullPath, adminUser, adminPassword, AuthenticationTypes.Secure);return directoryEntry;}

至此,重置密码的功能就完成了,我的代码里使用了SPSecurity.RunWithElevatedPrivileges(delegate()...

提权用,是的,如果不提权的话无法重置密码,会报0x80070005 (E_ACCESSDENIED)这个错误。

SharePoint重置密码功能Demo相关推荐

  1. 关于微信小程序开发中的显示个人信息以及重置密码功能

    最近我们学习了微信小程序中的显示个人信息以及重置密码,因为是老师做好的接口,所以我们只需要搭好前台页面以及编写好JS代码就可以了. 以上是显示个人信息的页面,包含了用户的学号,姓名,系别,班级(因为是 ...

  2. php改密后joomla无法登陆,php – Joomla 3.3禁用“重置密码”功能

    您可以使用所需的重定向为这两个视图创建模板覆盖. 您必须将文件放在: /templates/*your_template/html/com_users/remind/default.php /temp ...

  3. jsp mysql修改密码_Servlet+JSP+MySQL实现用户管理模块之七、实现用户信息更新和重置密码...

    实现用户信息更新和重置密码功能 如果用户信息很多的时候,感觉这项实现起来比较麻烦的.因为要考虑用户哪些信息需要更新哪些不需要更新,就必须先更原来的信息比对.呵呵,当然如果考虑到多个数据库表间的操作的话 ...

  4. java web 邮箱激活 与 忘记密码(重置密码)

    推荐: java后台通用权限管理系统(springboot)(https://blog.csdn.net/zwx19921215/article/details/97806078) 推荐:java 个 ...

  5. 【android studio】安卓实现mysql数据库登录、注册、重置密码。

    这学期安卓开发课程的实验中有一个实现登录功能,我就想使用数据库登录,一开始使用的sql server但最后没有实现,我就改用mysql,一开始使用mysql8.0连接不上,重新安装mysql5.5后成 ...

  6. 服务器修改mysql登录密码忘了怎么办,云服务器mysql密码重置密码忘记了

    云服务器mysql密码重置密码忘记了 内容精选 换一换 弹性云服务器系统密码涉及到客户重要的私人信息,提醒您妥善保管密码.如果您忘记密码或密码过期,可以重置密码.如果弹性云服务器提前安装了密码重置插件 ...

  7. 智能管家App kotlin版(3)——用户注册/登录/忘记重置密码/个人数据编辑开发

    前言:Bmob后端云为我们用户操作带来了极大的便捷,本文章主要是涵盖了一个用户系统逻辑,实现用户的登录,注册,找回密码,修改密码,邮箱验证,以及记住密码等功能的实现,通过本章你可以学习到宝贵的用户操作 ...

  8. [kubernetes]-kubernetes运行小幺鸡及邮件重置密码

    第一步 拷贝数据并修改配置文件 拷贝本地mysql数据到阿里云RDS 查看配置文件xiaoyao/WEB-INF/classes/config.properties中静态文件的存放位置拷贝到nfs服务 ...

  9. redash重置密码BUG解决

    redash邮件重置密码BUG解决方法 redash是一个比较少见的开源BI工具,由于其web框架使用的是Flask,所以其源码结构和内容还是相对容易看懂.今天在测试其重置密码功能时发现一个BUG,使 ...

最新文章

  1. 生态伙伴 | 轻计划入驻飞书,轻松管理你的项目
  2. 阿里YunOS总裁张春晖:云芯片将成为IOT的基础
  3. Java虚拟机详解02----JVM内存结构
  4. VS2017文件操作之使用fopen函数总结
  5. Springboot整合swagger指南
  6. 在计算机中dos代表什么意思,Boot是什么意思
  7. 发展壮大:帮助独立游戏开发商解决分销难题
  8. (转)《Billions》第二季回归,现实中的SAC也回来了
  9. python3编码得到中文_Python3的unicode编码转换成中文的问题及解决方案
  10. Spine_图片显示出错的处理方法
  11. 金山毒霸 2011 SP2 论坛内测开始
  12. python画球面投影_球面投影图片 python opencv实现[附代码]
  13. Sword38——字符串的排列
  14. 16 - 12 - 20 KMP算法 模式匹配 终极奥义!
  15. 基于社会工程学的网络攻击手段分析
  16. blob和clob类型数据怎么插入数据库
  17. 【uni-app】H5的返回拦截经验分享
  18. 8.ffplayer 原理、架构及代码分析——包队列 pktqueue
  19. 免费WebCamps-北美,亚洲和欧洲-*立即注册*
  20. 三、GNSS两种基本定位原理(1)

热门文章

  1. 包对象之Oracle如何编译失效包体
  2. 一步一步安装CentOS7(图文)
  3. Endnote X9.1 参考文献悬挂缩进
  4. 向量语义与静态词嵌入——从tf-idf到GloVe
  5. 超高频UHF RFID读写模块R200开发测试
  6. 写给自己——瞎写瞎画坑规(自己挖坑自己填啊!!)
  7. linux查找最近文件在哪里,Linux查找最近修改的文件
  8. 十款开源在线视频播放器
  9. 华为云服务器安装Linux并实现本地连接访问
  10. Endnote无法正确识别引文