SharePoint2013 以其他用户登录和修改AD域用户密码的功能使用介绍

所属分类: 软件教程 / 系统工具 阅读数: 1008
收藏 0 赞 0 分享

sharepoint默认是没有修改AD密码 和切换 用户的功能,这里我用future的方式来实现。

部署wsp前:

部署后:

点击以其他用户身份登录

点击修改用户密码:

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

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

修改用户密码的xml如下:

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

添加应用程序页面的代码如下:


<%@ Assembly Name="$SharePoint.Project.AssemblyFullName___FCKpd___0quot; %><%@ 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="3" 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 > 0)
            {
                str = str.Substring(0, str.Length - 1);
            }            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 == 2)
            {                return strArray[0];
            }            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|", "");
        }

    }
}
更多精彩内容其他人还在看

画图工具怎么画闪电图形?

画图工具怎么画闪电图形?windows喜用自带的画图工具想要画闪电图形,该怎么绘制闪电呢?下面我们就来看看画图工具绘制闪电的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Aiseesoft Data Recovery如何安装?Aiseesoft Data Recovery安装破解教程

Aiseesoft Data Recovery是一款专业的数据恢复软件,用户使用该软件可以快速恢复一些由于意外删除、清空回收站等一些其它原因造成的数据丢失。本文为大家介绍的是该软件的安装破解教程,需要了解的朋友可以阅读下文
收藏 0 赞 0 分享

iOS Toolkit如何安装?iOS Toolkit安装方法

iOS Toolkit是一款IOS系统修复工具,用户使用该软件可以修复iOS系统在各种问题中恢复正常,包括陷入恢复模式、DFU模式、白苹果标识、黑屏、循环启动等问题,本文为大家带来的是该软件的安装教程,需要了解的朋友可以阅读下文
收藏 0 赞 0 分享

如何用NLITE来定制您的xp系统(nite教程)

nlite是一款Windows系统瘦身工具,用它给系统安装盘瘦身是当前的热门话题。利用Nlite给系统安装盘瘦身后,可以在配置较低的老机器上顺利安装和运行Win XP及2003等系统,可以让一些老机器重新焕发光彩
收藏 0 赞 0 分享

winsetupfromusb怎么用?winsetupfromusb使用方法简介

winsetupfromusb是一款U盘启动盘制作工具,winsetupfromusb怎么用?是很多新用户都想知道的问题,今天小编就给大家简单介绍一下winsetupfromusb使用方法,希望对大家有所帮助
收藏 0 赞 0 分享

msiblast怎么用?msiBlast NI卸载工具使用方法简介

msiblast怎么用?是很多新用户都想知道的问题,msiblast虽然是英文页面,但使用方法并不复杂,今天小编就给大家简单介绍一下msiBlast NI卸载工具使用方法,需要的朋友欢迎借鉴
收藏 0 赞 0 分享

数据恢复软件哪个比较好用?六款非常好用的电脑数据恢复软件推荐

目前网络上有非常多的数据恢复软件供用户选择,但不同版本的数据恢复软件使用功能不一,且免费的版本较少,本文为大家推荐介绍了几款比较好用的数据恢复软件,需要的朋友可以前来阅读下载
收藏 0 赞 0 分享

腾讯魔镜壁纸在哪里?腾讯电脑管家魔镜壁纸位置及使用方法介绍

近日,腾讯电脑管家全新升级“桌面整理-魔镜壁纸”功能,那么,腾讯魔镜壁纸在哪里?魔镜壁纸怎么用呢?今天小编就给大家带来腾讯电脑管家魔镜壁纸位置及使用方法介绍,需要的朋友快去了解一下吧
收藏 0 赞 0 分享

adobe creative suite cleaner tool怎么用?Adobe卸载清理工具使用方法介绍

adobe creative suite cleaner tool怎么用?是很多新用户都想知道的问题,今天小编就给大家带来详细的Adobe卸载清理工具使用方法介绍,并提供windows版和mac版的adobe creative suite cleaner tool免费下载
收藏 0 赞 0 分享

赤兔Bitlocker分区恢复软件常见问题及解决方法

赤兔Bitlocker分区恢复软件是一款专门恢复误操作、重装系统等原因造成的Bitlocker加密分区丢失、Bitlocker加密分区无法打开的数据恢复软件,在使用这款软件时会遇到一些问题,本文整理了最常见的问题并作出解答
收藏 0 赞 0 分享
查看更多