烦烦烦SharePoint2013 以其他用户登录和修改AD域用户密码
sharepoint默认是没有修改AD密码 和切换 用户的功能,这里我用future的方式来实现。
部署wsp前:

部署后

点击以其他用户身份登录

点击修改用户密码:

这里的扩展才菜单我们用CustomAction来实现,我们需要添加空项目来部署它

以其他用户身份登录得xml如下:

修改用户密码的xml如下:

这里我们需要新建一个应用程序页面,首先需要添加路径映射:

添加应用程序页面的代码如下:
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %><%@ Import Namespace=
"Microsoft.SharePoint.ApplicationPages" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint,
Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities"
Assembly="Microsoft.SharePoint,
Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI"
Assembly="System.Web.Extensions,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=15.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="ChangePassword.aspx.cs"
Inherits="SharePointProjectDemo.Layouts.ChangePassword.ChangePassword"
DynamicMasterPageFile="~masterurl/default.master" %>
<asp:Content ID="PageHead"
ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content><asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<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="txtdomain" runat="server" ></asp:TextBox>
</td>
</tr>
<tr>
<td>
旧密码 </td>
<td>
: </td>
<td>
<asp:TextBox ID="txtOld" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr>
<td>
新密码 </td>
<td>
: </td>
<td>
<asp:TextBox ID="txtPass1" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr>
<td>
确认新密码 </td>
<td>
: </td>
<td>
<asp:TextBox ID="txtPass2" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="" align="center">
<br />
<asp:Button ID="btnChangePwd" runat="server" Text="修改密码"
OnClick="btnChangePwd_Click" />
</td>
</tr>
</table>
<br />
<br /></div></asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
修改密码
</asp:Content>
<asp:Content
ID="PageTitleInTitleArea"
ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
修改密码</asp:Content>
using System;using Microsoft.SharePoint;using Microsoft.SharePoint.WebControls;
using System.Security.Principal;using System.DirectoryServices.AccountManagement;
namespace SharePointProjectDemo.Layouts.ChangePassword
{ public class Impersonator
{ // Fields private WindowsImpersonationContext ctx = null; // Methods
public void BeginImpersonation()
{ try
{ if (!WindowsIdentity.GetCurrent().IsSystem)
{ this.ctx = WindowsIdentity.Impersonate(WindowsIdentity.GetCurrent().Token);
this.IsImpersonated = true;
}
} catch
{ this.IsImpersonated = false;
}
} public void StopImpersonation()
{ if (this.ctx != null)
{ this.ctx.Undo();
}
} // Properties
public bool IsImpersonated
{ set; get;
}
} public partial class ChangePassword : LayoutsPageBase
{ protected void btnChangePwd_Click(object sender, EventArgs e)
{ string str = this.txtPass1.Text.Trim();
string str2 = this.txtPass2.Text.Trim();
string str3 = this.txtOld.Text.Trim();
string str4 = this.txtdomain.Text.Trim();
if (string.IsNullOrWhiteSpace(str4))
{ this.ltMsg.Text = "域不能为空!";
} else if (string.IsNullOrWhiteSpace(str3))
{ this.ltMsg.Text = "旧密码不能为空!";
} else if (string.IsNullOrWhiteSpace(str))
{ this.ltMsg.Text = "新密码不能为空!";
} else if (str == str2)
{ this.ChangeUserPassword(this.txtPass2.Text.Trim(), str3, str4);
} else
{ this.ltMsg.Text = "两次新密码不一致,请检查!";
}
} private void ChangeUserPassword(string NewPwd, string OldPwd, string domain)
{ try
{
Impersonator impersonator = new Impersonator();
impersonator.BeginImpersonation();
using (PrincipalContext context = this.GetPContext(OldPwd, domain))
{
using (UserPrincipal principal = UserPrincipal.FindByIdentity
(context, IdentityType.SamAccountName, GetLoginName()))
{
principal.ChangePassword(OldPwd, NewPwd);
}
} if (impersonator.IsImpersonated)
{
impersonator.StopImpersonation(); this.ltMsg.Text = "已成功修改密码!";
} else
{ this.ltMsg.Text = "无法修改您的密码,请联系您的系统管理员!";
}
} catch (Exception exception)
{ this.ltMsg.Text = exception.Message;
}
} private string GetDomainContainter(string domain)
{ string str = string.Empty;
string[] strArray = domain.Split(new char[] { '.' },
StringSplitOptions.RemoveEmptyEntries);
foreach (string str2 in strArray)
{
str = str + "DC=" + str2 + ",";
} if (str.Length > )
{
str = str.Substring(, str.Length - );
} return str;
} private string GetLoginName()
{ string username= SPContext.Current.Web.CurrentUser.LoginName.Replace("i:0#.w|", "");
if(username.EndsWith(@"system"))
{
username = username.Replace("system", "sherry");
} return username;
} private string GetLoginNameDomain()
{ string[] strArray = GetLoginName().Split(new char[] { '\' },
StringSplitOptions.RemoveEmptyEntries);
if (strArray.Length == )
{ return strArray[];
} return null;
} private PrincipalContext GetPContext(string OldPwd, string domain)
{ return new PrincipalContext(ContextType.Domain, domain, this.GetDomainContainter(domain),
ContextOptions.Negotiate, this.GetLoginName(), OldPwd);
} protected void Page_Load(object sender, EventArgs e)
{ this.ltMsg.Text = GetLoginName().Replace("i:0#.w|", "");
} }
}
烦烦烦SharePoint2013 以其他用户登录和修改AD域用户密码的更多相关文章
- SharePoint2013 以其他用户登录和修改AD域用户密码 功能
sharepoint默认是没有修改AD密码 和切换 用户的功能,这里我用future的方式来实现. 部署wsp前: 部署后: 点击以其他用户身份登录 点击修改用户密码: 这里的扩展才菜单我们用Cust ...
- java修改AD域用户密码使用SSL连接方式
正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...
- python-ldap修改AD域用户密码(CA+SSL)
代码连接:https://github.com/raykuan/ldap-notes 使用python的ldap模块连接AD服务器,有两种方式: 非加密:con = ldap.initialize(' ...
- AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户, ...
- SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)
由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...
- SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...
- gitlab用户登录与AD域用户集成
---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...
- JAVA 通过LDAP获取AD域用户及组织信息
因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...
- Java利用jcifs集成AD域用户认证
近期一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了如今网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我 ...
随机推荐
- ssh scp ssh-copy-id 非22端口的操作方法
(1)首先我们来看一下ssh-copy-id的非22端口的操作方法 ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 10056 wwwad@192.168.20. ...
- oracle练习题
题干:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 建表后数据如下: SQL> select * from ...
- js获取服务器时间戳
<!DOCTYPE html> <html> <head> <title>ajax</title> </head> <bo ...
- hdu1542矩阵的并 线段树+扫描线
求矩阵的并,也就是要求所有的面积.那可以吧总的图形按照矩阵来切割.使其为一块一块. 输入的时候用坐标表示,这里扫描线从下到上扫描.初始时让下面的边为1,上面的为-1: 用一条先从下面开始想上扫描.遇到 ...
- Java设计模式-抽象工厂模式(Abstract Factory )
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- FastDFS在centos上的安装配置与使用
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务.(百 ...
- Ubuntu安装VMware Tools的方法
最后我将提供一个12版本的VMware Tools集合,包括了linux.iso. 背景: VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(S ...
- UVa 1025 A Spy in the Metro
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913 预处理出每个时间.每个车站是否有火车 为了方便判断是否可行,倒推处理 ...
- hadoop单节点windows 7 环境搭建
前言 Windows下运行,通常有两种方式:一种是用VM方式安装一个,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处是使用比较方便,安装过程 ...
- Request.InputStream 接收Post Data
今天 用 Request.Form /Request.Params 等怎么也获取不到客户发过来的Post 数据 后来试着用了 Request.InputStream 竟然可以 using (Syste ...