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 đó

pdf 34 trang kimcuc 8500
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

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:

  • pdfbai_giang_lap_trinh_java_5_bai_8_validation_va_interceptor.pdf