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

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

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

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

1. 创建SharePoint空解决方案。

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

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

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="{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. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->用户管理模块新增“重置用户密码”功能

    不管是什么系统登录用户都有忘记密码的时候,忘记密码就进入不了系统.系统应该可以提供重置用户密码的功能.在我们框架中重置用户密码功能一般用用户管理员来完成.当然如果做得复杂点还可以由用户自己来重置(如: ...

  2. PHP会员找回密码功能实现实例介绍

    设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名时,点击登录页面的“找回密码”超链接,打开表单,并输入注册用的E-MAIL邮箱,提交. 3. ...

  3. PHP会员找回密码功能的简单实现

    文章来自:博客 http://www.jb51.net/article/91944.htm 设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名 ...

  4. MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

    目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...

  5. sharepoint修改密码

    增加SharePoint2010修改域密码功能 前提SharePoint2010的用户基于AD的,因此修改密码是修改了AD的密码,当然也可以修改本机密码(非域的密码).这里我们讨论修改域密码.我们修改 ...

  6. 通过邮件找回密码功能的Java实现

    1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人 ...

  7. crm开发之用户重置密码

    重置 密码这这功能. 我是没有在,stark组件中. 内置的.所以需要,自己进行定制.也就只是,在已有的增删改查的基础上,再增加一条url  和相对应的  视图函数. 好的是, 我已经预留了,增加的接 ...

  8. SpringMVC通过邮件找回密码功能的实现

    1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密 ...

  9. django用户认证系统——重置密码7

    当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...

随机推荐

  1. CSS 关于IE6 margin 为负数 负值的时候 正常显示的方法

    一定要加position: relative; 有时候比如margin-left的负数,还需要加上如 float:left 属性.

  2. Jqplot使用总结之二(双Y轴)

    最近需要用Jqplot做双Y轴的Chart图,首先我找到了文档上的例子并对数据做了一些调整: 1.例子展示: var s1 = [["2002-01-01", 112000], [ ...

  3. JDK环境变量安装正确还报错的情况解决方案

    环境变量 JAVA_HOME , PATH 都已配置完毕,并且 java -version也显示正确如下 E:\apache-tomcat-8.0.30-windows-x64\apache-tomc ...

  4. 利用php的序列化和反序列化来做简单的数据本地存储

    利用php的序列化和反序列化来做简单的数据本地存储 如下程序可以做为一个工具类 /** * 利用php的序列化和反序列化来做简单的数据本地存储 */ class objectdb { private ...

  5. JavaScript ——闭包理解

    昨天晚上听别人谈起闭包这个东西,虽然对js有一点了解但却丝毫没有印象,今天也没什么事就顺便研究了一下满足好奇宝宝.整合于网上的理解,记录一下. 一.闭包的作用域 要理解闭包,首先必须理解Javascr ...

  6. [翻译]了解ASP.NET底层架构(八)

    原文地址:http://www.cnblogs.com/tmfc/archive/2006/09/04/493304.html [翻译]了解ASP.NET底层架构(完) [翻译]了解ASP.NET底层 ...

  7. python 练习 1

    from math import sqrt from datetime import date def k1(): #某人是1999年9月29日生日 #问到2006年9月29日他活了多少天 a=dat ...

  8. js,jquery判断某一节点是否存在

    前两天工作时遇到一问题,就是模块A显示时,B是一种样式,模块A删除,B是另一种样式.记录下判断节点存在的方法. 先写下html <!doctype html> <html> & ...

  9. 《javascript高级程序设计》 第24章 最佳实践 Best Practices

    24.1 可维护性 Maintainability24.1.1 什么是可维护的代码 What Is Maintainable Code?24.1.2 代码约定 Code Conventions 24. ...

  10. Linux基础: 挂载镜像文件(Mount & ISO)

    ISO/Ghost 镜像文件概念(裸机安装,无光驱安装,跨平台安装) ISO是镜像文件:所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例 ...