Tôi đang đọc nguồn .NET4 (chúng có thể được tải xuống để nghiên cứu một cách tự do) và tôi đã tìm thấy điều gì đó lạ trong việc triển khai System.Web.Security.FormsAuthenticationModule
.Mã này trong FormsAuthenticationModule phải hoạt động như thế nào?
Lớp được khai báo như thế này:
public sealed class FormsAuthenticationModule : IHttpModule
nơi IHttpModule
có hai phương pháp - Init()
và Dispose()
.
Bên OnEnter()
đang có những dòng này:
// Step 2: Call OnAuthenticate virtual method to create
// an IPrincipal for this request
OnAuthenticate(new FormsAuthenticationEventArgs(context));
nơi OnAuthenticate()
được khai báo như thế này:
// OnAuthenticate: Forms Authentication modules can override
// this method to create a Forms IPrincipal object from
// a WindowsIdentity
private void OnAuthenticate(FormsAuthenticationEventArgs e) {
Bây giờ lớp là sealed
, vì vậy nó không thể kế thừa từ. Ngoài ra OnAuthenticate()
không phải là virtual
vì vậy tôi không thấy nó có thể bị ghi đè như thế nào.
Vì vậy, có vẻ như những nhận xét này chỉ lỗi thời và ghi đè OnAuthenticate()
không còn khả thi nữa.
Tôi có gặp trục trặc gì không? Mã này có thể cho phép ghi đè OnAuthenticate()
không?
AFAIU Lớp học này được niêm phong ngay từ đầu [http://msdn.microsoft.com/en- us/library/system.web.security.formsauthenticationmodule (v = vs.71) .aspx) –
Từ tên và params nó sau đây là một ['trigger event'] (http://stackoverflow.com/a/ 2448530/60761), chúng thường là ảo. Đó là tất nhiên xung đột với niêm phong. Trường hợp xấu nhất một lớp học có thể đăng ký các sự kiện riêng của mình. –