SharePoint重置密码功能Demo
博客地址 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的更多相关文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->用户管理模块新增“重置用户密码”功能
不管是什么系统登录用户都有忘记密码的时候,忘记密码就进入不了系统.系统应该可以提供重置用户密码的功能.在我们框架中重置用户密码功能一般用用户管理员来完成.当然如果做得复杂点还可以由用户自己来重置(如: ...
- PHP会员找回密码功能实现实例介绍
设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名时,点击登录页面的“找回密码”超链接,打开表单,并输入注册用的E-MAIL邮箱,提交. 3. ...
- PHP会员找回密码功能的简单实现
文章来自:博客 http://www.jb51.net/article/91944.htm 设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名 ...
- MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览
目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...
- sharepoint修改密码
增加SharePoint2010修改域密码功能 前提SharePoint2010的用户基于AD的,因此修改密码是修改了AD的密码,当然也可以修改本机密码(非域的密码).这里我们讨论修改域密码.我们修改 ...
- 通过邮件找回密码功能的Java实现
1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人 ...
- crm开发之用户重置密码
重置 密码这这功能. 我是没有在,stark组件中. 内置的.所以需要,自己进行定制.也就只是,在已有的增删改查的基础上,再增加一条url 和相对应的 视图函数. 好的是, 我已经预留了,增加的接 ...
- SpringMVC通过邮件找回密码功能的实现
1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密 ...
- django用户认证系统——重置密码7
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...
随机推荐
- iOS开发 画六边形(多边形)
- (void)drawRect:(CGRect)rect { UIBezierPath * path = [UIBezierPath bezierPath]; [path moveToPoint:C ...
- 深入理解JVM-3垃圾收集器与内存分配策略
在上面一篇文章中,介绍了java内存运行时区域,其中程序计数器.虚拟机栈.本地方法栈3个区域随线程生灭:栈中的栈帧随着方法的进入和退出而有条不紊的执行着进栈出栈的操作,每一个栈帧中分配着多少内存基本上 ...
- noip赛前小结1
正是noip前夕,我的心却颇不宁静. 最近的内部测试,我的成绩非常不稳定,一会儿可以考个第一,一会儿也可以掉得很低. 总之感觉非常的焦虑. 何以解忧?唯有作文. 要有良好的生活作息. 最近考试不稳定的 ...
- 能源项目xml文件标签释义--default-lazy-init
1.spring的default-lazy-init参数 spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置.到 service配置到dao配置.乃至到数据库连接. ...
- 【EPplus】Column width discrepancy
description Hi Jan, I have noticed that when I set a column width there is a discrepancy between the ...
- XPath的语法
XPath 是XML的查询语言,和SQL的角色很类似.以下面XML为例,介绍XPath 的语法. <?xml version="1.0" encoding="ISO ...
- JAVA智能设备基于OpenGL的3D开发技术 之AABB碰撞检测算法论述
摘要:无论是PC机的3D还是智能设备应用上,碰撞检测始终是程序开发的难点,甚至可以用碰撞检测作为衡量3D引擎是否完善的标准.现有许多3D碰撞检测算法,其中AABB碰撞检测是一种卓有成效而又经典的检测算 ...
- JavaScript实现五子棋的界面设计
五子棋的界面设计包括绘制棋盘.绘制棋子及黑白棋轮流落子. 涉及的知识点主要有canvas绘制直线.设置画笔颜色:canvas画圆.填充渐变色 1.绘制棋盘 先设定棋盘的宽.高:然后利用for循环,根据 ...
- Merge Sorted Array [LeetCode]
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...
- linq to xml学习
http://www.cnblogs.com/greatverve/archive/2010/07/09/linq-to-xml-add-delete-update-query.html 记录一下,别 ...