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="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 > )
{
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|", "");
} }
}

代码下载地址:http://download.csdn.net/detail/dz45693/6930655

SharePoint2013 以其他用户登录和修改AD域用户密码 功能的更多相关文章

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

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

  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. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

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

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

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

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

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

  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. VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记

    VMware Workstation软件需要依赖于宿主操作系统之上. VMware vSphere是VMware公司推出一套服务器虚拟化解决方案,它是可以直接独立安装和运行在祼机上的系统. VMwar ...

  2. JDK版本的特性

    1. 2.JDK1.5增加的是: (1) 泛型与枚举类型(枚举类型是静态,常量.里面也可以包含构造方法,成员方法,但是构造方法一定是私有的. 适合枚举的是 有限数据,封装特定的数据,), (2)注解( ...

  3. 华为S5300系列交换机限制特定IP可以登录Web

    针对Web管理可能有如下需求: 1.限制某个特定IP允许访问Web 2.默认修改80端口访问 那么针对上面的设置可以有效杜绝而已Web密码暴力破解,增强交换机安全等. 实现: 1.限制特定IP登录We ...

  4. Android开发之解决APP启动白屏或者黑屏闪现的问题

    在做搜芽的过程中,发现那个外包人缘做的不行,由于启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下.解决一下.这不,万能的网络 ...

  5. LPC-Link-II Rev C JTAG

  6. cocos 主循环

    CCApplication的run为主循环,负责在空闲的时候,调用CCDirector的mainloop,setAnimationInterval设置多少秒一帧.m_nAnimationInterva ...

  7. Mysql5.6主从复制-基于binlog

    MySQL5.6开始主从复制有两种方式:基于日志(binlog):基于GTID(全局事务标示符). 此文章是基于日志方式的配置步骤 环境: master数据库IP:192.168.247.128sla ...

  8. 哈希小demo hashCode取模

    package demo; import java.util.ArrayList; import java.util.List; class Person { private String usern ...

  9. 利用进程ID获取主线程ID

    利用进程ID获取主线程ID,仅适用于单线程.多线程应区分哪个是主线程,区分方法待验证 (1)好像可以用StartTime最早的,不过通过线程执行时间不一定可靠,要是在最开始就CreateThread了 ...

  10. java根据模板HTML动态生成PDF

    原文:https://segmentfault.com/a/1190000009160184 一.需求说明:根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看. 二.解决方案: ...