Thứ Sáu, 18 tháng 7, 2014

Create custom interceptor in struts2

Create custom interceptor in struts2

   Mục đích . Interceptor được làm để ngăn chặn người dùng truy xuất đên tài nguyên cần được bảo vệ khi chưa được chứng thực.
  Sau đây ta sẽ làm ví dụ để truy xuất vào trong protected phải trải qua bước đăng nhập, và nếu đi thằng đến protected page cũng sẽ bị redirect về trang yêu cầu đăng nhập
Trong ví dụ này ta sẽ tạo hai trang đó là home.jsp và index.jsp. Trang home jsp trang cần được bảo vệ, và trang index.jsp sẽ là trang để chứa giao diện đăng nhập chứng thực để quyết định xem có vào trang jsp được hay không .
Tạo giao diện trang index.jsp có from và các strust input để nạp các giá trị cho các biến username ,password 

   Sau khi form được gửi đi nó sẽ đến strust.xml. Tại đây nó sẽ chọn action đã được request tới .. action ở đây sẽ được map tương ứng với method excute() trong Actionsupport Login 


   Sau khi xác định rõ được method nào trong actionsupport nào xử lý action yêu cầu .request được xử lý tiếp trong action support Login(). Trong actonSupport Login ta sẽ khai báo các properties username, password,(có getter setter để map với biến bên view). Ta cũng viết luôn nội dung của method excute(). Method này sẽ trả về các chuỗi string khác nhau cho từng trường hợp. tương ứng với đăng nhập đúng hay không.


   Tiếp lại quay lai file struts.xml , action được request trước đó sẽ nhận chuỗi string trả về actoinsupport , để xác định result chuyển hướng tương ứng với chuỗi string trả về. Ở đây nếu đăng nhập đúng thì trả về success, nếu chọn result có name succsss. 
  Và result có name success sẽ chuyển hướng đến action tên là home , đến lượt mình home action lại nhận chuỗi success từ actionsupport để trả về home.jsp.

  Như vậy đến đấy ta đã xác thực đẻ người dùng truy xuất đến action  home khi đăng nhập đứng và ở lại không redirect khi đăng nhập sai .Nhưng vấn đề lại khi người dùng truy xuất url trực tiếp đến action tên home thi ta chưa ngăn được
Để giải quyết được nhu cầu trên ta sẽ tiến hành tạo và cấu hình cho một file intercepter.
Trước tiên ta sẽ tao một đoạn code trong file excute của ActionSupport Login để set 1 session tên username. Session này sẽ được dùng để kiểm tra liệu nguwoif dùng đã đăng nhập hay chưa.

  Tiếp đến tạo 1 class implemnet intercepter.,Trong ham inercepter của class này ta sẽ tiến hành kiểm tra xem session username có tôn tại hay không. Nếu đã có session username thi method này sẽ cho request đến một action nào đó của người dùng đi qua.. Còn không thi ta cho  quay về trang index để yêu cầu đăng nhập,, đúng sẽ cho đi theo action mong muốn..


Sau đó ta sẽ đó sẽ đi cậu hình cho interceptor đã tạo
chạy ứng dụng

Như vậy interceptor cũng gần giống vai trò của filter , nhưng interceptor không thể lập lại như filter.

Không có nhận xét nào:

Đăng nhận xét