FormsAuthenticationModule中的这段代码应该如何工作?

时间:2013-03-04 12:01:26

标签: c# .net iis .net-4.0

我正在阅读.NET4源代码(可以免费下载它们进行研究)我在System.Web.Security.FormsAuthenticationModule的实现中发现了一些奇怪的东西。

该类声明如下:

public sealed class FormsAuthenticationModule : IHttpModule

其中IHttpModule有两种方法 - Init()Dispose()

OnEnter()内,有以下几行:

// Step 2: Call OnAuthenticate virtual method to create 
//    an IPrincipal for this request
OnAuthenticate( new FormsAuthenticationEventArgs(context) );

其中OnAuthenticate()的声明如下:

// OnAuthenticate: Forms Authentication modules can override 
//             this method to create a Forms IPrincipal object from
//             a WindowsIdentity 
private void OnAuthenticate(FormsAuthenticationEventArgs e) {

现在这个班级是sealed,所以不可能继承。 OnAuthenticate()也不是virtual,所以我看不出它是如何被覆盖的。

所以看起来这些评论已经过时,而且无法再覆盖OnAuthenticate()

我有什么不对吗?这段代码可能允许覆盖OnAuthenticate()吗?

2 个答案:

答案 0 :(得分:1)

它不起作用。这只是不正确的文档。不是MS的第一个。例如,我在.NET Framework 1.1版中向MS通知了这一点,这里我们处于4.5,并且文档仍然完全具有误导性:http://msdn.microsoft.com/en-us/library/7he0a7s1.aspx

请注意“对继承者的说明”部分。当人们包含多个internal abstract属性和方法时,有人应该如何从BindingManagerBase派生一个类?然而,BindingManagerBase和CurrencyManager的文档中有几个地方有“Notes to Inheritors”......

答案 1 :(得分:0)

我知道这是旧的,但唯一的方法是在 Global.asax 中实现 FormsAuthenticate_OnAuthenticate 事件。当您将 e.Context.User 设置为一个值时,它会阻止执行内部代码。有点笨重。