ASP và Windows Form Microsoft ASP.NET phần 3

Chia sẻ: Nghia Bui Tuan | Ngày: | Loại File: PDF | Số trang:9

0
149
lượt xem
98
download

ASP và Windows Form Microsoft ASP.NET phần 3

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bạn cần ngăn người dùng truy xuất các trang nào đó trừ khi họ tự xác thực trước với một trang đăng nhập tùy biến. Hiện thực Forms authentication bằng cách cấu hình thẻ trong file Web.config của ứng dụng

Chủ đề:
Lưu

Nội dung Text: ASP và Windows Form Microsoft ASP.NET phần 3

  1. 1.1 Sử dụng Forms authentication Bạn cần ngăn người dùng truy xuất các trang nào đó trừ khi họ tự xác thực trước với một trang đăng nhập tùy biến. Hiện thực Forms authentication bằng cách cấu hình thẻ trong file Web.config của ứng dụng. Bạn phải tạo trang đăng nhập, nhưng ASP.NET sẽ giữ lại trạng thái xác thực của người dùng. Forms authentication là một mô hình bảo mật linh hoạt, cho phép ngăn người dùng chưa được xác thực truy xuất vào trang nào đó. Bạn cần viết mã để thực hiện xác thực, và ASP.NET cấp một cookie cho người dùng đã được xác thực. Người dùng không có cookie sẽ bị chuyển hướng sang trang đăng nhập khi truy xuất một trang được bảo vệ. Để hiện thực Forms authentication, bạn phải thực hiện các bước sau đây: • Cấu hình Forms authentication bằng thẻ trong file Web.config của ứng dụng. • Sử dụng các thiết lập trong file Web.config để hạn chế người dùng nặc danh truy xuất vào một trang hoặc thư mục cụ thể. • Tạo trang đăng nhập, và thêm logic xác thực của bạn vào (sử dụng lớp FormsAuthentication thuộc không gian tên System.Web.Security). Bước đầu tiên là cấu hình file Web.config trong thư mục gốc của ứng dụng để kích hoạt Forms authentication, như được trình bày trong đoạn mã dưới đây. Bạn cũng cần chỉ định trang đăng nhập tùy biến (người dùng chưa được xác thực sẽ bị chuyển hướng sang trang này) và thời gian trễ (sau thời gian này, cookie sẽ bị loại bỏ). Authentication cookie tự động được làm mới với mỗi yêu cầu web. Kế đến, bạn cần thêm quy tắc phân quyền để từ chối người dùng nặc danh. Cách dễ nhất để bảo toàn các trang là tạo một thư mục con cùng với file Web.config của nó. File
  2. Web.config này sẽ từ chối việc truy xuất của các người dùng nặc danh, như được trình bày dưới đây: Bây giờ, ASP.NET sẽ tự động gửi các yêu cầu chưa được xác thực (đối với các trang trong thư mục con) đến trang đăng nhập tùy biến. Một tùy chọn khác không cho truy xuất đến các trang cụ thể trong thư mục hiện thời là sử dụng thẻ : Bạn cũng có thể từ chối các người dùng cụ thể bằng cách nhập danh sách tên người dùng (phân cách bằng dấu phẩy) thay vào ký tự “?” (“?” nghĩa là “tất cả các người dùng nặc danh”). Kế tiếp, bạn cần tạo trang đăng nhập. Trang đăng nhập có thể xác thực người dùng bằng password được viết cứng (phù hợp cho các thử nghiệm đơn giản), cơ sở dữ liệu phía server, hoặc bất kỳ kiểu logic xác thực tùy biến nào. Một khi người dùng đã được xác thực thành công, bạn cần gọi phương thức tĩnh
  3. FormsAuthentication.RedirectFromLoginPage. Phương thức này sẽ thiết lập authentication cookie và chuyển hướng người dùng đến trang được yêu cầu lúc đầu. Dưới đây là trang đăng nhập sơ bộ, chỉ kiểm tra một password cụ thể khi người dùng nhắp vào nút Login: using System; using System.Web; using System.Web.UI.WebControls; using System.Web.Security; public class LoginPage : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblStatus; protected System.Web.UI.WebControls.Button cmdLogin; protected System.Web.UI.WebControls.TextBox txtPassword; protected System.Web.UI.WebControls.TextBox txtName; // (Bỏ qua phần mã designer.) private void cmdLogin_Click(object sender, System.EventArgs e){ if (txtPassword.Text.ToLower() == "secret") { FormsAuthentication.RedirectFromLoginPage( txtName.Text, false); }else { lblStatus.Text = "Try again."; } } } Để thử nghiệm trang đăng nhập trên, bạn hãy yêu cầu trang SecurePage.aspx (nằm trong thư mục Secured). Bạn sẽ bị chuyển hướng sang trang login.aspx, và nếu nhập đúng password, bạn sẽ được trả về trang SecurePage.aspx.
  4. The image part with relationship ID rId5 was not found in the file. Hình 7.7 Trang đăng nhập tùy biến 1.2 Thực hiện xác nhận tính hợp lệ có-chọn-lựa Bạn cần sử dụng các điều kiểm validator của ASP.NET. Tuy nhiên, bạn muốn kiểm tra bằng mã lệnh để có thể xác nhận tính hợp lệ chỉ các điều kiểm hay tập các điều kiểm nào đó, hoặc có thể tùy biến các thông báo lỗi dựa trên đầu vào không hợp lệ. Vô hiệu thuộc tính EnableClientScript của mọi điều kiểm validator để trang có thể được post-back. Kế đó, sử dụng phương thức Page.Validate để xác nhận tính hợp lệ của trang hoặc phương thức BaseValidator.Validate để xác nhận tính hợp lệ của từng điều kiểm riêng rẽ. Điều kiểm validator của ASP.NET là giải pháp lý tưởng để xác nhận tính hợp lệ của form một cách nhanh chóng. Với điều kiểm validator, bạn có thể xác nhận tính hợp lệ của toàn bộ trang cùng một lúc. Nếu muốn xác nhận tính hợp lệ chỉ một phần form, hoặc muốn quyết định xem có cần xác định tính hợp lệ một điều kiểm nào đó hay không (dựa trên giá trị của một điều kiểm khác chẳng hạn), bạn sẽ cần thực hiện thao tác xác nhận tính hợp lệ có-chọn-lựa. Bước đầu tiên trong thao tác này là vô hiệu thuộc tính EnableClientScript của mọi điều kiểm validator trên trang. Nếu không, việc kiểm tra sẽ được thực hiện tại client thông qua JavaScript, trang sẽ không được post-back nếu nó chứa các giá trị không hợp lệ, và phần mã thụ lý sự kiện sẽ không được thực thi. Một khi đã thực hiện thay đổi này, bạn có thể xác nhận tính hợp lệ từng điều kiểm một bằng phương thức BaseValidator.Validate, hoặc xác nhận tính hợp lệ toàn bộ trang bằng phương thức Page.Validate. Ví dụ dưới đây thực hiện kiểm tra phía server với hai validator: RangeValidator và RegularExpressionValidator (xác nhận tính hợp lệ một địa chỉ e-mail). Nếu kiểm tra thất bại, đoạn mã này sẽ duyệt qua tập hợp các validator trên form bằng thuộc tính Page.Validators. Mỗi khi tìm thấy một validator có lỗi, nó sẽ tìm điều kiểm tương ứng bằng phương thức Page.FindControl rồi hiển thị giá trị lỗi. using System;
  5. using System.Web; using System.Web.UI.WebControls; public class SelectiveValidation : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox txtNumber; protected System.Web.UI.WebControls.TextBox txtEmail; protected System.Web.UI.WebControls.Label lblCustomSummary; protected System.Web.UI.WebControls.RegularExpressionValidator validatorEmail; protected System.Web.UI.WebControls.RangeValidator validatorNumber; protected System.Web.UI.WebControls.Button cmdValidate; // (Bỏ qua phần mã designer.) private void cmdValidate_Click(object sender, System.EventArgs e) { // Xác nhận tính hợp lệ của trang. this.Validate(); if (!Page.IsValid) { lblCustomSummary.Text = ""; foreach (BaseValidator validator in this.Validators) { if (!validator.IsValid) { TextBox invalidControl = (TextBox) this.FindControl(validator.ControlToValidate); lblCustomSummary.Text += "The page contains the following error: " + validator.ErrorMessage + "." + "The invalid input is: " + invalidControl.Text + "." + ""; } } }else {
  6. lblCustomSummary.Text = "Validation succeeded."; } } } The image part with relationship ID rId6 was not found in the file. Hình 7.8 Thực hiện thao tác xác nhận tính hợp lệ tùy biến 1.3 Thêm động điều kiểm vào Web Form Bạn cần thêm một điều kiểm web vào một trang web lúc thực thi và thụ lý các sự kiện của nó. Tạo một đối tượng điều kiểm, thêm nó vào tập hợp Controls của một điều kiểm container, và sử dụng lệnh AddHandler để kết nối bất kỳ phương thức thụ lý sự kiện nào. Bạn phải tạo điều kiểm sau mỗi lần postback. Kỹ thuật thêm điều kiểm web vào trang web tương tự như kỹ thuật thêm điều kiểm Windows vào form, nhưng có một vài điểm khác, bao gồm: • Các điều kiểm được-tạo-động chỉ tồn tại đến lần postback kế tiếp. Nếu cần chúng, bạn phải tái tạo lại khi trang được trả về. Tuy nhiên, đòi hỏi này không ngăn bạn viết mã để thụ lý các sự kiện của chúng. • Việc định vị các điều kiểm được-tạo-động không mấy dễ dàng. Bạn nên sử dụng điều kiểm trực kiện (literal control) chứa mã HTML (như ) để phân cách các điều kiểm được-tạo-động. • Các điều kiểm được-tạo-động nên được đặt trong một điều kiểm container (như Panel) hơn là đặt trực tiếp lên trang. Điều này khiến cho việc định vị chúng dễ dàng hơn.
  7. • Nếu muốn tương tác với điều kiểm sau này, bạn nên cho nó một định danh (ID) duy nhất. Bạn có thể sử dụng ID này để thu lấy nó từ tập hợp Controls của điều kiểm container. Nơi tốt nhất để tạo các điều kiểm mới là trong phương thức thụ lý sự kiện Page.Load (bảo đảm điều kiểm sẽ được tạo mỗi khi trang được đáp ứng). Ngoài ra, nếu bạn thêm một điều kiểm nhập (input) sử dụng view state, thông tin view state sẽ được trả lại cho điều kiểm sau khi sự kiện Page.Load phát sinh. Tương tự, vì sự kiện Page.Load luôn phát sinh trước khi sự kiện nào khác diễn ra, bạn có thể tái tạo một điều kiểm dựng nên các sự kiện phía server, và phần mã thụ lý sự kiện của nó sẽ diễn ra ngay sau sự kiện Page.Load. Ví dụ dưới đây (xem hình 7.9) sẽ tạo động ba điều kiểm (hai Button và một TextBox) và định vị chúng bằng điều kiểm trực kiện (đóng vai trò là dấu phân cách). Hai Button được kết nối với các phương thức thụ lý sự kiện riêng biệt. TextBox được cấp một định danh duy nhất để phần text của nó có thể được thu lấy sau này (trong đáp ứng cho cú nhắp chuột vào Button). The image part with relationship ID rId7 was not found in the file. Hình 7.9 Các điều kiểm được-tạo-động using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; public class DynamicControls : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblMessage; protected System.Web.UI.WebControls.Panel pnl;
  8. // (Bỏ qua phần mã designer.) private void Page_Load(object sender, System.EventArgs e) { // Tạo Button. Button dynamicButton = new Button(); dynamicButton.Text = "Dynamic Button A"; // Kết nối phương thức thụ lý sự kiện. dynamicButton.Click += new EventHandler(cmdDynamicA_Click); // Thêm Button vào Panel. pnl.Controls.Add(dynamicButton); // Thêm dấu ngắt dòng. pnl.Controls.Add(new LiteralControl("")); // Tạo Button thứ hai. dynamicButton = new Button(); dynamicButton.Text = "Dynamic Button B"; dynamicButton.Click += new EventHandler(cmdDynamicB_Click); pnl.Controls.Add(dynamicButton); // Thêm dấu ngắt dòng. pnl.Controls.Add(new LiteralControl("")); // Tạo TextBox. TextBox dynamicText = new TextBox(); pnl.Controls.Add(dynamicText); // Gán ID cho TextBox. dynamicText.ID = "DynamicText"; } private void cmdDynamicA_Click(object sender, System.EventArgs e) { lblMessage.Text = "Clicked A"; GetText();
  9. } private void cmdDynamicB_Click(object sender, System.EventArgs e) { lblMessage.Text = "Clicked B"; GetText(); } private void GetText(){ lblMessage.Text += ""; foreach (Control ctrl in pnl.Controls){ if (ctrl.ID == "DynamicText"){ lblMessage.Text += "TextBox contains: " + ((TextBox)ctrl).Text; } } } } Nếu cần tạo động các layout phức tạp (gồm các nhóm điều kiểm được tạo dựng trước), bạn có thể chuyển sang sử dụng điều kiểm người dùng và nạp động chúng vào trang. Kỹ thuật này sẽ được trình bày trong mục 7.13.
Đồng bộ tài khoản