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域用户密码的更多相关文章

  1. SharePoint2013 以其他用户登录和修改AD域用户密码 功能

    sharepoint默认是没有修改AD密码 和切换 用户的功能,这里我用future的方式来实现. 部署wsp前: 部署后: 点击以其他用户身份登录 点击修改用户密码: 这里的扩展才菜单我们用Cust ...

  2. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  3. python-ldap修改AD域用户密码(CA+SSL)

    代码连接:https://github.com/raykuan/ldap-notes 使用python的ldap模块连接AD服务器,有两种方式: 非加密:con = ldap.initialize(' ...

  4. AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户, ...

  5. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  6. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  7. gitlab用户登录与AD域用户集成

    ---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...

  8. JAVA 通过LDAP获取AD域用户及组织信息

    因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...

  9. Java利用jcifs集成AD域用户认证

    近期一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了如今网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我 ...

随机推荐

  1. php 判断是否get传值的参数是否存在

    if(is_array($_GET)&&count($_GET)>0)//先判断是否通过get传值了    {        if(isset($_GET["id&qu ...

  2. hdu3487 伸展树(区间搬移 区间旋转)

    对于区间旋转使用lazy思想就能解决.然后对于区间搬移,先把a-1结点做根,b+1作为它的右孩子,这样ch[ch[root][1]][0]就是区间[a,b],现将他取出. 然后在将当前的树伸展,把c结 ...

  3. Fedora21下安装cuda7.5

    Fedora21装cuda7.5 首先制作启动U盘.装好fedora21后别做任何update等yum和rpm操作,按照下面步骤走. 其中遇到用UEFI模式安装cuda时,系统一定要求提供公钥和私钥, ...

  4. 简短的几句js实现css压缩和反压缩功能

    写在前面 最近一直在整理css,但因为现在Visual Studio 2013太智能了,它每每在我按ctrl+E+D进行格式化代码的时候,就会将css进行层次格式化(如下图所示),而这个格式让我老大实 ...

  5. Aop 是面向切面编程,

    Aop 是面向切面编程,是在业务代码中可以织入其他公共代码(性能监控等),现在用普通的方法实现AOP http://blog.csdn.net/heyanfeng22/article/details/ ...

  6. Laravel教程 六:表单 Forms

    Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate ...

  7. unity3d DefineManager 全局宏定义

    /** * Editor Wizard for easily managing global defines in Unity * Place in Assets/Editor folder, or ...

  8. JavaScript 技巧总结

    日期1. 日期时间戳 +new Date() = new Date().getTime() 数组1. 类数组转数组 var arr = Array.prototype.slice.call(argum ...

  9. Ioc注解

    注解: 添加注解时,需要添加context的相关 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  10. ASP.NET MVC 数据分页

    作为一个菜鸟级的程序猿,总结一下学到的两种数据分页. 1.真分页 真分页就是需要时从数据库里读出需要多的数据,利用存储过程可实现.网上的分页SQL特别多,数据库自带的一些方法也可方便的帮助分页,但是我 ...