Bài giảng Lập trình Java 5 - Bài 8: Validation và Interceptor
Dữ liệu vào không hợp lệ sẽ gây các lỗi khó
lường. Vì vậy việc kiểm soát dữ liệu vào luôn
đóng vai trò quan trọng của ứng dung.
Các lỗi thường gặp
Để trống ô nhập
Không đúng định dạng email, creditcard, url
Sai kiểu số nguyên, số thực, ngày giờ
Giá trị tối thiểu, tối đa, trong phạm vi
Không giống mật khẩu, đúng captcha, trùng mã
Không như mong đợi của việc tính toán nào đó
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java 5 - Bài 8: Validation và Interceptor", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java 5 - Bài 8: Validation và Interceptor
LẬP TRÌNH JAVA 5 BÀI 8: VALIDATION & INTERCEPTOR MỤC TIÊU Hiểu được tầm quan trọng của validation Triển khai validation trong Spring MVC Hiểu cơ chế hoạt động của Interceptor Tạo và sử dụng Interceptor Ứng dụng Interceptor để bảo vệ tài nguyên riêng tư GIỚI THIỆU KIỂM LỖI Dữ liệu vào không hợp lệ sẽ gây các lỗi khó lường. Vì vậy việc kiểm soát dữ liệu vào luôn đóng vai trò quan trọng của ứng dung. Các lỗi thường gặp Để trống ô nhập Không đúng định dạng email, creditcard, url Sai kiểu số nguyên, số thực, ngày giờ Giá trị tối thiểu, tối đa, trong phạm vi Không giống mật khẩu, đúng captcha, trùng mã Không như mong đợi của việc tính toán nào đó MINH HỌA KIỂM LỖI CASE STUDY Kiểm các lỗi cho form Không để trống họ và tên Không để trống điểm Điểm phải có giá trị từ 0 đến 10 Phải chọn ngành DEMO Chạy student/validate1.htm + Nhập dữ liệu không hợp lệ + Nhập dữ liệu hợp lệ KIỂM LỖI BẰNG TAY Đối số này nên là đối số cuối cùng rejectValue() cho phép bổ sung thông báo lỗi cho thuộc tính mark của bean student Phương thức hasErrors() cho biết có thông báo lỗi nào hay không? HIỂN THỊ LỖI Hiển thị lỗi thuộc tính name của bean student Thuộc tính element chỉ ra thẻ chứa thông báo lỗi. Mặc định là ĐỊNH DẠNG LỖI Thông báo lỗi sinh ra có dạng {thông báo lỗi} Ví dụ Hiển thị lỗi cho thuộc tính họ tên CSS sau được sử dụng để định dạng cho các thông báo lỗi *[id$=.errors]{ color:red; font-style: italic; } Selector *[id$=.errors] sẽ chọn ra các thẻ có thuộc tính @id kết thúc bởi chữ “.errors” DEMO Giải thích student/validate1.htm + Student1 + Controller.validate1() + student1.jsp KIỂM LỖI BẰNG ANNOTATION Nạp các annotation lỗi vào các thuộc tính lớp bean được sử dụng để nhận dữ liệu form Annotation kiểm lỗi @NotBlank: kiểm trường name rỗng @NotNull: kiểm trường mark và major null @DecimalMin(), DecimalMax(): kiểm khoảng số thực STUDENTCONTROLLER Chỉ cần bổ sung @Validated trước bean nhận dữ liệu form thì các thuộc tính của bean sẽ được kiểm lỗi theo các luật đã nạp vào các trường bean HIỂN THỊ LỖI TẬP TRUNG được sử dụng để hiển thị tất cả các lỗi DEMO Giải thích student/validate2.htm + Student2 + Controller.validate2() + student2.jsp THƯ VIỆN KIỂM LỖI Để có thể sử dụng phương pháp kiểm lỗi bằng annotation này cần bổ sung các thư viện sau validation-api-1.0.0.GA.jar hibernate-validator-4.2.0.Final.jar log4j-1.2.16.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar slf4j-simple-1.6.1.jar CÁC ANNOTATION KIỂM LỖI THƯỜNG DÙNG javax.validation.constraints : : : : : : : : : Annotation Ý nghĩa Ví dụ NotBlank Chuỗi không rỗng @NotBlank() NotNull Không cho phép null @NotNull() NotEmpty Chuỗi /tập hợp không rỗng @NotEmpty() Length Độ dài chuỗi @Length(min=5, max=10) Max Giá trị số nguyên tối đa @Max(value=“10”) Min Giá trị số nguyên tối thiểu @Min(value=“0”) Size, Range Phạm vi số nguyên tối @Size(min=0, max=10) DecimalMax Giá trị số thực tối đa @DecimalMin(value=“5.5”) DecimalMin Giá trị số nguyên tối thiểu @DecimalMax(value=“9.5”) Future Thời gian trong tương lai @Future() Past Thời gian trong quá khứ @Past() Pattern So khớp biểu thức chính qui @Pattern(regexp="[0-9]{9,10}") Email Đúng dạng email @Email() CreditCardNumber Đúng dạng số thẻ tín dụng @CreditCardNumber() URL Đúng dạng url @URL() SafeHtml Không được chứa thẻ HTML @SafeHtml() LẬP TRÌNH JAVA 5 PHẦN 2 GIỚI THIỆU INTERCEPTOR Interceptor là một thành phần có nhiệm vụ tiền và hậu xử lý các request đến phương thức action CẤU TRÚC CỦA INTERCEPTOR Kế thừa lớp HandlerInterceptorAdapter Chạy TRƯỚC phương thức action Chạy SAU phương thức action, TRƯỚC view Chạy SAU view false sẽ không chuyển yêu cầu đến action QUI TRÌNH XỬ LÝ CỦA INTERCEPTOR Nếu chúng ta muốn xử lý một công việc nào đó trước khi action thực thi thì phải viết mã ở preHandle. Nếu chúng ta muốn chuẩn bị một điều gì đó cho View thì có thể viêt mã ở postHandle() Action View preHandle() postHandle() afterCompletion() request response XÂY DỰNG LOGGERINTERCEPTOR KHAI BÁO INTERCEPTOR Interceptor sau khi đã xây dựng xong cần phải khai báo với hệ thống Spring để lọc các action Khai báo sau đây LoggerInterceptor sẽ lọc tất cả mọi action CONTROLLER VÀ VIEW PHÂN TÍCH KẾT QUẢ THỰC HIỆN Chạy home/index.htm và xem kết xuất từ Console Qua kết quả chúng ta thấy thứ tự thực hiện preHandle()=>index()=>postHandle()=>index.jsp=>afterCompletion() Interceptor Interceptor InterceptorViewAction DEMO Chạy home/index.htm và giải thích rõ hoạt động của LoggerInterceptor CẤU HÌNH INTERCEPTOR Đôi khi Interceptor được xây dựng ra chỉ để lọc một số action chứ không phải lọc tất cả các action Cấu hình sau chỉ cho phép LoggerInterceptor lọc action home/index.htm và home/about.htm CẤU HÌNH INTERCEPTOR Một tình huống khác là chúng ta muốn lọc tất cả các action trong HomeController chỉ loại trừ home/index.htm Ở đây chúng ta thấy được sử dụng để loại trừ các action không muốn lọc còn ** là ký hiệu đại diện cho nhóm ký tự bất kỳ TÌNH HUỐNG SECURITY Các action màu vàng của 2 controller sau chỉ được phép truy cập sau khi đã đăng nhập GIẢI QUYẾT TÌNH HUỐNG Xây dựng SecurityInterceptor lọc tất cả các action của 2 controller trên loại trừ các action không tô màu vàng. SecurityInterceptor phải chạy trước khi request đến action và sẽ thực hiện công việc: Kiểm tra xem trong session có attribute có tên là user hay chưa? Nếu chưa có thì chuyển hướng sang user/login.htm Ở user/login.htm sau khi đăng nhập thành công cần tạo một attribute user trong session XÂY DỰNG SECURITYINTERCEPTOR DEMOChưa đăng nhập: + Chạy user/register.htm + Chạy user/change-password.htm Đã đăng nhập + Chạy user/change-password.htm Giải thích TÌNH HUỐNG NẠP DỮ LIỆU DÙNG CHUNG Module giao diện này thuộc về layout nhưng lại cần nạp dữ liệu từ CSDL. Vấn đề: Viết mã ở đâu để cấp dữ liệu cho module này? 1. Viết trong mọi action của mọi controller vì view nào cũng cần dữ liệu này 2. Viết trong postHandle() của Interceptor lọc tất cả mọi action. Rõ ràng phương án này rất tối ưu TỔNG KẾT NỘI DUNG BÀI HỌC Tìm hiểu tầm quan trọng của Validation Thực hiện kiểm lỗi bằng tay Thực hiện kiểm lỗi bằng annotation Tìm hiểu Interceptor Xây dựng Interceptor Cấu hình Interceptor để lọc action Ứng dụng Interceptor để bảo vệ chức năng riêng tư.
File đính kèm:
- bai_giang_lap_trinh_java_5_bai_8_validation_va_interceptor.pdf