Czytam źródła .NET4 (można je pobrać do badań swobodnie) i znalazłem coś dziwnego w realizacji System.Web.Security.FormsAuthenticationModule
.W jaki sposób powinien działać ten kod w module FormsAuthenticationModule?
Klasa jest zadeklarowana następująco:
public sealed class FormsAuthenticationModule : IHttpModule
gdzie IHttpModule
ma dwie metody - Init()
i Dispose()
.
Wewnątrz OnEnter()
tam są te wiersze:
// Step 2: Call OnAuthenticate virtual method to create
// an IPrincipal for this request
OnAuthenticate(new FormsAuthenticationEventArgs(context));
gdzie OnAuthenticate()
jest zadeklarowane tak:
// OnAuthenticate: Forms Authentication modules can override
// this method to create a Forms IPrincipal object from
// a WindowsIdentity
private void OnAuthenticate(FormsAuthenticationEventArgs e) {
Teraz klasa jest sealed
, więc jest to niemożliwe, aby dziedziczyć. Również OnAuthenticate()
nie jest virtual
, więc nie widzę, jak to mogło zostać przesłonięte w każdym razie.
Wygląda na to, że te komentarze są po prostu nieaktualne, a przesłanianie OnAuthenticate()
nie jest już możliwe.
Czy coś złego? Czy ten kod prawdopodobnie umożliwia nadpisanie OnAuthenticate()
?
AFAIU Ta klasa jest zamknięta od samego [początku] (http://msdn.microsoft.com/en- us/library/system.web.security.formsauthenticationmodule (v = vs.71) .aspx) –
Z nazwy i params wynika, że jest to ['event trigger'] (http://stackoverflow.com/a/ 2448530/60761), powinny one zwykle być wirtualne. To oczywiście kłóci się z zapieczętowanymi. Najgorszy przypadek, w którym klasa mogłaby zasubskrybować własne wydarzenia. –