sharepoint默認是沒有修改AD密碼 和切換 用戶的功能,這里我用future的方式來實現。
部署wsp前:
部署后:
點擊以其他用戶身份登錄
點擊修改用戶密碼:
這里的擴展才菜單我們用CustomAction來實現,我們需要添加空項目來部署它
以其他用戶身份登錄得xml如下:
修改用戶密碼的xml如下:
這里我們需要新建一個應用程序頁面,首先需要添加路徑映射:
添加應用程序頁面的代碼如下:
<%@AssemblyName="$SharePoint.PRoject.AssemblyFullName$"%><%@ImportNamespace="Microsoft.SharePoint.applicationPages"%><%@RegisterTagprefix="SharePoint"Namespace="Microsoft.SharePoint.WebControls"Assembly="Microsoft.SharePoint,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"%><%@RegisterTagprefix="Utilities"Namespace="Microsoft.SharePoint.Utilities"Assembly="Microsoft.SharePoint,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"%><%@RegisterTagprefix="asp"Namespace="System.Web.UI"Assembly="System.Web.Extensions,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"%><%@ImportNamespace="Microsoft.SharePoint"%><%@AssemblyName="Microsoft.Web.CommandUI,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"%><%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="ChangePassWord.aspx.cs"Inherits="SharePointProjectDemo.Layouts.ChangePassword.ChangePassword"DynamicMasterPageFile="~masterurl/default.master"%><asp:ContentID="PageHead"ContentPlaceHolderID="PlaceHolderAdditionalPageHead"runat="server"></asp:Content><asp:ContentID="Main"ContentPlaceHolderID="PlaceHolderMain"runat="server"><asp:LiteralID="ltMsg"EnableViewState="false"runat="server"></asp:Literal><div><h3><span>修改密碼</span></h3><tablewidth="400px"><tr><td>域</td><td>:</td><td><asp:TextBoxID="txtdomain"runat="server"></asp:TextBox></td></tr><tr><td>舊密碼</td><td>:</td><td><asp:TextBoxID="txtOld"runat="server"TextMode="Password"></asp:TextBox></td></tr><tr><td>新密碼</td><td>:</td><td><asp:TextBoxID="txtPass1"runat="server"TextMode="Password"></asp:TextBox></td></tr><tr><td>確認新密碼</td><td>:</td><td><asp:TextBoxID="txtPass2"runat="server"TextMode="Password"></asp:TextBox></td></tr><tr><tdcolspan="3"align="center"><br/><asp:ButtonID="btnChangePwd"runat="server"Text="修改密碼"OnClick="btnChangePwd_Click"/></td></tr></table><br/><br/></div></asp:Content><asp:ContentID="PageTitle"ContentPlaceHolderID="PlaceHolderPageTitle"runat="server">修改密碼</asp:Content><asp:ContentID="PageTitleInTitleArea"ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"runat="server">修改密碼</asp:Content>
usingSystem;usingMicrosoft.SharePoint;usingMicrosoft.SharePoint.WebControls;usingSystem.Security.Principal;usingSystem.DirectoryServices.AccountManagement;namespaceSharePointProjectDemo.Layouts.ChangePassword{publicclassImpersonator{//FieldsprivateWindowsImpersonationContextctx=null;//MethodspublicvoidBeginImpersonation(){try{if(!WindowsIdentity.GetCurrent().IsSystem){this.ctx=WindowsIdentity.Impersonate(WindowsIdentity.GetCurrent().Token);this.IsImpersonated=true;}}catch{this.IsImpersonated=false;}}publicvoidStopImpersonation(){if(this.ctx!=null){this.ctx.Undo();}}//PropertiespublicboolIsImpersonated{set;get;}}publicpartialclassChangePassword:LayoutsPageBase{protectedvoidbtnChangePwd_Click(objectsender,EventArgse){stringstr=this.txtPass1.Text.Trim();stringstr2=this.txtPass2.Text.Trim();stringstr3=this.txtOld.Text.Trim();stringstr4=this.txtdomain.Text.Trim();if(string.IsNullOrWhiteSpace(str4)){this.ltMsg.Text="域不能為空!";}elseif(string.IsNullOrWhiteSpace(str3)){this.ltMsg.Text="舊密碼不能為空!";}elseif(string.IsNullOrWhiteSpace(str)){this.ltMsg.Text="新密碼不能為空!";}elseif(str==str2){this.ChangeUserPassword(this.txtPass2.Text.Trim(),str3,str4);}else{this.ltMsg.Text="兩次新密碼不一致,請檢查!";}}privatevoidChangeUserPassword(stringNewPwd,stringOldPwd,stringdomain){try{Impersonatorimpersonator=newImpersonator();impersonator.BeginImpersonation();using(PrincipalContextcontext=this.GetPContext(OldPwd,domain)){using(UserPrincipalprincipal=UserPrincipal.FindByIdentity(context,IdentityType.SamAccountName,GetLoginName())){principal.ChangePassword(OldPwd,NewPwd);}}if(impersonator.IsImpersonated){impersonator.StopImpersonation();this.ltMsg.Text="已成功修改密碼!";}else{this.ltMsg.Text="無法修改您的密碼,請聯系您的系統管理員!";}}catch(Exceptionexception){this.ltMsg.Text=exception.Message;}}privatestringGetDomainContainter(stringdomain){stringstr=string.Empty;string[]strArray=domain.Split(newchar[]{'.'},StringSplitOptions.RemoveEmptyEntries);foreach(stringstr2instrArray){str=str+"DC="+str2+",";}if(str.Length>0){str=str.Substring(0,str.Length-1);}returnstr;}privatestringGetLoginName(){stringusername=SPContext.Current.Web.CurrentUser.LoginName.Replace("i:0#.w|","");if(username.EndsWith(@"system")){username=username.Replace("system","sherry");}returnusername;}privatestringGetLoginNameDomain(){string[]strArray=GetLoginName().Split(newchar[]{''},StringSplitOptions.RemoveEmptyEntries);if(strArray.Length==2){returnstrArray[0];}returnnull;}privatePrincipalContextGetPContext(stringOldPwd,stringdomain){returnnewPrincipalContext(ContextType.Domain,domain,this.GetDomainContainter(domain),ContextOptions.Negotiate,this.GetLoginName(),OldPwd);}protectedvoidPage_Load(objectsender,EventArgse){this.ltMsg.Text=GetLoginName().Replace("i:0#.w|","");}}}
新聞熱點
疑難解答