System.AppDomain.SetPrincipalPolicy 方法

方法描述

指定在此应用程序域中执行时如果线程尝试绑定到用户,用户和标识对象应如何附加到该线程。

语法定义(C# System.AppDomain.SetPrincipalPolicy 方法 的用法)

[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)]
public void SetPrincipalPolicy(
	PrincipalPolicy policy
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
policy System-Security-Principal-PrincipalPolicy PrincipalPolicy 值之一,指定要附加到线程的主体对象类型。
返回值 void

提示和注释

仅当使用 Thread.CurrentPrincipal 属性前设置此值才有效。 例如,如果将 Thread.CurrentPrincipal 设置为给定主体(例如,一般主体),然后使用 SetPrincipalPolicy 方法将 PrincipalPolicy 设置为 WindowsPrincipal,则当前主体保持为一般主体。

System.AppDomain.SetPrincipalPolicy 方法例子

该示例还显示使用 SetThreadPrincipal 方法更改主体(在应用程序域中可用来附加至线程)的影响。

using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
	static void Main(string[] args)
	{
		// Create a new thread with a generic principal.
		Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Set the principal policy to WindowsPrincipal.
		AppDomain currentDomain = AppDomain.CurrentDomain;
		currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
			
		// The new thread will have a Windows principal representing the
		// current user.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Create a principal to use for new threads.
		IIdentity identity = new GenericIdentity("NewUser");
		IPrincipal principal = new GenericPrincipal(identity, null);
		currentDomain.SetThreadPrincipal(principal);
			
		// Create a new thread with the principal created above.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();
		
		// Wait for user input before terminating.
		Console.ReadLine();
	}

	static void PrintPrincipalInformation()
	{
		IPrincipal curPrincipal = Thread.CurrentPrincipal;
		if(curPrincipal != null)
		{
			Console.WriteLine("Type: " + curPrincipal.GetType().Name);
			Console.WriteLine("Name: " + curPrincipal.Identity.Name);
			Console.WriteLine("Authenticated: " +
				curPrincipal.Identity.IsAuthenticated);
			Console.WriteLine();
		}
	}
}

异常

异常 异常描述
AppDomainUnloadedException 尝试对已卸载的应用程序域进行操作。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。