Thứ Tư, 19 tháng 7, 2017

Sử dụng Filter kết hợp với Struts 2 Framework để xác thực và phân quyền truy cập cho user

Sử dụng Filter kết hợp với Struts 2 Framework để xác thực và phân quyền truy cập cho user

 

Tác giả: Bạch Minh Nam

 

Mục đích: Chủ đề của bài viết này hướng dẫn cách sử dụng Filter kết hợp với Struts 2 Framework để lọc quyền truy cập vào các resource khác nhau tùy theo vai trò của user khi login vào hệ thống.

 

Yêu cầu kiến thức cơ bản:

  • Nắm rõ mô hình MVC2, Struts 1.x Framework, các khái niệm cơ bản của Struts 2.x Framework
  • Nắm rõ những phương pháp cơ bản của lập trình hướng đối tượng bằng ngôn ngữ Java
  • Nắm rõ những khái niệm lập trình web sử dụng JavaEE cùng những kiến thức về Servlet, JSP
  • Nắm vững cơ chế vận hành của RequestDispatcher và Filter, cách sử dụng Filter như là Controller trong mô hình MVC2 (có thể xem thêm bài viết về Filter tại đây: http://www.kieutrongkhanh.net/2017/06/topic-su-dung-filter-nhu-la-controller.html)

 

Mô tả ứng dụng:

  • Ứng dụng yêu cầu đăng nhập vào hệ thống với username và password được cung cấp

 

 

  • Nếu thành công với role = 1 (staff) thì hệ thống sẽ tự động chuyển đến trang search dành cho staff. Ngược lại, hệ thống sẽ chuyển sang trang invalid

 

  • Khi đăng nhập với phân quyền là staff, statff được phép search sản phẩm theo tên hoặc ID

  • Sau khi logout khỏi hệ thống, nếu người sử dụng back trình duyệt để trợ lại trang search, hoặc copy paste một đường link bất kì (book mark) để truy cập trang mà họ không có quyền truy cập, thì ứng dụng sẽ chuyển đến trang “Không tìm thấy” – page not found.

  • Database được sử dụng trong bài viết này có tên MobileStore. Cấu trúc của Database được mô tả như bên dưới

  • Dữ liệu mẫu nhập được sử dụng để demo (role = 1: staff) như sau

 

 

 

  • Yêu cầu tool sử dụng:

o   IDE: Netbeans 6.9.1, Netbeans 7.4 hoặc Netbeans 8.x

o   JDK 6 update 22, JDK 7 update 51, JDK 8 update 66

o   Server: Tomcat 6.0.26, Tomcat 7.x, Tomcat 8.x

o   DBMS: SQL Server 2005 đến SQL Server 2014

o   Thư viện hỗ trợ: Driver kết nối database SQLServer (sqljdbc.jar hay sqljdbc4.jar), Struts2 Framework taglib

o   IDE Netbeans phải cài đặt plugin hỗ trợ Struts 2 Framework

 

Các bước thực hiện:

  • Tạo mới project Web Application với JavaEE5, server Apache Tomcat, thư viện Framework Strut 2
  • Thực hiện cấu hình Datasource kết nối DB động

 

 

 

 

  • Chúng ta bắt đầu thực hiện chức năng login

o   Tạo trang login

 

 

o   Mapping default page cho trang login với welcome file trong tập tin web.xml là rỗng và cấu hình trong tập tin struts.xml như sau

 

 

o   Tạo trang invalid, với đường link quay về default page

 

 

o   Lưu ý:

§  Với một vài hệ thống, việc để href=“” (chuỗi rỗng) sẽ load trở lại chính đường link hiện tại trên khung URL của browser, do đó, để gọi lại action “rỗng” để quay về default page, chúng ta sẽ để cặp dấu nháy đơn bọc trong cặp dấu nháy kép: href= “‘’”

o   Tạo DTO để chứa thông tin của user khi login vào hệ thống mapping với bảng tbl_Account

 

o   Tạo DAO với function checkLogin, kiểm tra đăng nhập với role = 1 (staff)

o   Lưu ý:

§  Trường password được set là chuỗi rỗng “” nếu như đã xác thực người sử dụng là staff nhằm đảm bảo tính bảo mật của dữ liệu người dùng khi được lưu trữ trên session

§  Hàm checkLogin chỉ kiểm tra những account nào có role = 1

o   Tạo Action Class để Login:

o   Tạo trang search.jsp sơ khởi:

 

o   Mapping action login vào struts.xml

 

 

o   Clean, build và deploy để test thử ứng dụng

o   Chúng ta hoàn thành xong chức năng Login

 

  • Chúng ta chuyển đến thực hiện chức năng search theo tên hoặc theo ID của sản phẩm

o   Tạo đối tượng DTO để đón nhận dữ liệu mapping khi search thành công

 

o   Tạo DAO với chức năng search theo tên hoặc theo ID của sản phẩm:

 

 

o   Tạo Action Class xử lý chức năng search:

§  Điều kiện !searchValue.trim().equals(“”) là để Action không search khi chuỗi giá trị bằng rỗng hoặc chỉ chứa khoảng trắng.

 

 

o   Mapping action search vào tập tin struts.xml

 

 

o   Cập nhật giao diện của trang search.jsp

§  Import Taglib của Struts 2 Framework

§  Tạo search form

 

 

§  Tạo grid để hiển thị kết quả search

§  Lưu ý: trong phần kiểm tra điều kiện, chúng ta nên để thêm giá trị “searchValue!=null” nhằm mục đích đảm bảo trang search.jsp được load lần đầu tiên, sẽ không xuất hiện dòng “No result found!!”.

 

 

o   Clean build và deploy, thấy được kết quả search

o   Chúng ta hoàn thành xong chức năng search

  • Chúng ta tiếp tục thực hiện chức năng Logout

o   Chúng ta thực hiện cập nhật nội dung trang search.jsp với đường link Logout

 

o   Tạo Logout Action

 

o   Mapping action logout vào file struts.xml

o   Clean, build và deploy, thấy nút logout hoạt động như mong đợi (chuyển về trang login.html)

o   Chúng ta hoàn thành xong chức năng logout.

 

  • Bây giờ chúng ta sẽ tự tạo và sử dụng Filter như là một lớp xác thực bảo mật khi đăng nhập.

o   Đầu tiên, chúng ta thực hiện tạo trang notFoundPage.html

o   Sau đó, chúng ta thực hiện tạo mới filter AuthFilter lưu trong thư mục sample/filter của Source Package

o   Nhấn next.

o   Lưu ý: trong bảng Filter Mapping, khi AuthFilter của chúng ta nằm trên cùng, nghĩa là tất cả mọi request đến Web App đều phải qua filter này trước tiên trước khi chuyển vào FilterDispatcher của Struts2 Framework. (Mặc định khi tạo mới, filter sẽ nằm trên cùng)

o   Nhấn nút Finish.

o   Chúng ta tiến hành cài đặt code cho AuthFilter:

§  Tạo list danh sách các resource được phép truy cập dành cho mỗi role tương ứng trong Web App

§  List “guest” chứa những resource mà mọi đối tượng không cần đăng nhập vẫn có thể xem thấy: bao gồm các trang như login.html, invalid.html, notFoundPage.html; và bao gồm các action như action rỗng dẫn đến default page ban đầu, action login…

§  List “staff” chứa những resource phải đăng nhập với tư cách staff mới có quyền truy cập: bao gồm trang như search.jsp, và các action như action search, action logout…

§  Lưu ý

o   Các action thường được gọi theo một trong hai cách là <tên action> hoặc là <tên action>.action, do đó, khi add một action vào list resource, chúng ta add một cặp như trên.

o   Ngoài ra, các thành phần resource để làm cho thực tế thì tên các page hay resource, chúng ta có thể mapping qua tập tin properties để mang tính linh hoạt khi thay đổi cho ứng dụng (tham khảo bài viết tại địa chỉ http://www.kieutrongkhanh.net/2016/12/xay-dung-ung-dung-voi-ejb-3-tren-entity.html )

§  Toàn bộ code vận dụng, chúng ta sẽ viết tập trung vào method doFilter

§  Đầu tiên kiểm tra trong session xem có login chưa, nếu chưa thì kiểu tra resource có chứa trong danh sách dành cho guest hay không, nếu có thì chuyển tới resource đó, nếu không thì chuyển đến trang 404 not found.

§  Tương tự, nếu đã login thì kiểm tra xem role của user là bao nhiêu, nếu role là staff và resource có trong danh sách cho phép của staff thì chuyển đến resource đó, nếu không thì chuyển về trang chủ dành cho staff là search.jsp

§  Dựa trên nhu cầu và thiết kế của Web App, chúng ta có thể tạo ra nhiều list resource tương ứng với mỗi một role cần phân quyền khác nhau, sau đó check role + resource tương tự như của staff trong hình mô tả.

o   Clean build deploy project, chúng ta hoàn thành xong chức năng của Filter trong việc xác minh user và phân quyền dựa trên role tương ứng.

  • Cấu trúc thư mục project sau khi hoàn tất các chức năng trên như sau:

 

 

Chúc mừng quí vị đã hoàn tất việc kết hợp Filter với một Framework, ở đây là Struts 2. Ở đây, chúng ta thấy rõ việc kết hợp việc kiến thức nền của việc xây dựng ứng dụng web, kết hợp design Pattern cùng với các Framework sẽ tăng tính linh hoạt và đa dạng trong xây dựng ứng dụng. Rất mong quí vị góp ý về nội dung bài viết này

7 nhận xét:

  1. e làm theo như a mà phần filter ko phân quyền đc ạ :((((

    Trả lờiXóa
  2. phần fillter không phân quyền được ở chổ getSession(false), lần đầu get thì bằng null nhưng lần sau nó tự tạo ra 1 session mới mặc dù đã set false

    Trả lờiXóa
    Trả lời
    1. Sau lần login đầu tiên thì một session sẽ được tạo ra, nên mặc dù getSession(false), nó vẫn sẽ trả về khác null.
      Tuy nhiên, trong hàm execute của LogoutAction, chúng ta đã remove attribute "USER". Nên theo nguyên tắc, nếu bạn code đúng, filter vẫn hoạt động chính xác.
      Hãy thử kiểm tra lại code. Nếu vẫn không được, hãy thử thay session.remove("USER"); bằng session.invalidate();
      Thân ái

      Xóa
  3. Thuộc dòng máy rửa bát Serie8 là dòng sản phẩm cao cấp nhất với máy rửa bát của Bosch nên dễ hiểu khi SMS88TI36E sở hữu những tính năng công nghệ tối tân bậc nhất thế giới hiện nay được tích hợp cùng với máy. Chưa bao giờ tôi thấy Bosch làm người dùng phải thất vọng về mặt chức năng sản phẩm cả. Bạn mong muốn tìm mua một chiếc Máy rửa bát thật tốt? Bạn yêu thích những thiết bị công nghệ tối tân phục vụ cuộc sống thông minh trong thời đại 4.0? Máy rửa bát Bosch SMS88TI36E chắc chắn là một sự lựa chọn hoàn hảo dành cho bạn! Dòng máy rửa bát được đánh giá cực cao bởi giới chuyên gia với hệ thống tính năng thuộc hàng mạnh nhất thị trường, máy rửa bát Bosch SMS88TI36E được trang bị đầy đủ những công nghệ hiện đại bậc nhất hiện nay và là một trong những sản phẩm được yêu thích và quan tâm nhiều nhất tại Việt Nam,
    Không những thế, những thế, những nút bấm cũng được thiết kế cùng với những biểu tượng dễ hiểu và được bố trí hai bên màn hình hiển thị một cách khoa học tạo điều kiện thuận tiện nhất cho người dùng. Mời các bạn tham khảo bài viết đánh giá máy rửa bát Bosch SMS68UI02E. Với điểm cộng ấn tượng về thiết kế, máy rửa bát Bosch SMS68UI02E được rất nhiều gia đình Việt yêu thích và lựa chọn. - Bảng điều khiển của máy rửa bát Bosch SMS68UI02E cũng mang lại ấn tượng với hệ thống đèn LED vừa mang lại nét đẹp của sự hiện đại vừa tạo nên sự sinh động, trực quan cho người dùng. Máy được thiết kế độc lập, màu xám bạc thanh lịch, với công nghệ hiện đại được áp dụng cho phép tối ưu hóa khoang rửa, nhờ đó, tuy máy có dung tích khá lớn tới 13 bộ đồ Âu nhưng lại có thiết kế vô cùng nhỏ gọn hợp lý, và đặc biệt là dễ dàng di chuyển và lắp đặt ở mọi nơi trong không gian bếp làm phòng bếp trở nên hiện đại và sang trọng hơn.
    Màn hình hiển thị đèn LED được bố trí phía trước máy giúp người dùng theo dõi thời gian và tiến độ vận hành, còn lại toàn bộ bảng điều khiển được thiết kế chìm bên trong cánh cửa đem đến một nét thiết kế đầy ấn tượng và sáng tạo. Hệ thống nút bấm cảm ứng hỗ trợ đèn hiển thị toát lên phong cách hiện đại sinh động. Cuốn hút nhưng không màu mè, một bí mật đầy huyền ảo đang chờ đợi bạn khi cánh cửa máy bật mở có thể lôi cuốn bạn ngay từ ánh mắt đầu tiên bằng một ấn tượng rất khó phai đấy! Là dạng máy độc lập, máy rửa Bosch SMI68MS07E đem đến sự tiện lợi trong lắp đặt cho mọi kết cấu gian bếp từ cổ điện đến hiện đại. Bề mặt máy được làm hoàn toàn bằng thép không rỉ sang trọng , cứng cáp.
    Quý khách có nhu cầu đặt mua sản phẩm máy rửa bát vui lòng liên hệ qua:
    Website: https://bep365.vn – Hệ thống phân phối thiết bị nhà bếp - phòng tắm chính hãng
    Hotline: 0943 365 765 - (024) 36 865 865
    Email: hotro@bep365.vn

    Trả lờiXóa
  4. Máy rửa bát Bosch SMS46II04E là một sản phẩm được rất nhiều người yêu thích và đánh giá cao trên các website chuyên về đồ gia dụng hiện nay trên thế giới. Tăng tốc VarioSpeed Plus, Sấy khô Extra Dry và Diệt khuẩn tăng cường Hygiene Plus.. luôn là thương hiệu đi đầu về công nghệ trên thị trường với những sản phẩm được trang bị các tính năng tiên tiến hiện đại nhất nhằm đem đến chất lượng phục vụ tốt nhất cho người sử dụng. Đương nhiên máy rửa bát Bosch SMS46II04E cũng không phải ngoại lệ, cùng Bếp365 điểm qua những chức năng nổi bật của chiếc máy rửa chén này: - Dung tích rửa: 14 bộ bát đĩa châu Âu. - 6 chương trình rửa chính: Rửa nhanh 1 giờ 1Hour 65°, Rửa tự động Auto 45° - 65°,Thủy tinh Glass 40°, Rửa tiết kiệm Eco 50°, Chuyên sâu Intensive 70°, Rửa tráng Pre Rinse và 3 tùy chọn bổ sung.

    Bosch SMS50D48EU tuy đơn giản trong thiết kế nhưng luôn toát lên vẻ thanh lịch và sang trọng giúp căn bếp của bạn trở nên hoàn hảo và tiện nghi hơn. Chỉ với khoảng 13 triệu đồng là bạn đã có thể sở hữu được một chiếc máy hoàn hảo trong thiết kế và đa dạng tính năng như Bosch SMS50D48EU. Quả thực rất khó để chê được một chiếc máy rửa bát của Bosch về mặt thiết kế và SMS50D48EU cũng không ngoại lệ. Toàn bộ bề mặt máy được bao bọc hoàn toàn bởi thép không gỉ, ưu điểm của chất liệu này là giúp sản phẩm luôn trắng sáng, đặc biệt là dễ lau chùi và vệ sinh. Bảng điều khiển của Bosch SMS50D48EU được thiết kế khá đơn giản, gồm hai nút bấm và một nút vặn được bố trí bên phải, người dùng có thể dễ dàng thao tác và sử dụng. Bản thân là một chiếc máy rửa bát độc lập, với kích thước khá khiêm tốn 660x600x845mm, bạn có thể đặt máy ở bất kì vị trí nào trong gian bếp. Một mức giá được cho là khá hợp lí so với những gì mà chiếc máy này sẽ đem đến cho bạn, từ sự sang trọng, thanh lịch trong căn bếp, cho đến những tiện ích giúp công việc nội trợ trở nên nhẹ nhàng và đơn giản hơn. Chắc chắn Bosch SMS50D48EU sẽ không khiến bạn phải thất vọng.

    Máy rửa bát Bosch SMS46NI05E thông minh, vượt trội làm hài lòng ngay cả những khách hàng khó tính nhất. Một giải pháp hoàn hảo để giải quyết triệt để vấn đề trên chính là máy rửa bát Bosch SMS46NI05E. Được sản xuất trên dây truyền công nghệ hiện đại với nhiều tính năng tiện lợi và 6 chương trình rửa thông minh không chỉ làm sạch sẽ, sáng bóng bát đĩa mà còn giúp tiết kiệm năng lượng đáng kể cho bạn. Vì lẽ đó, không ngạc nhiên khi máy rửa bát Bosch sms46ni05e được nhiều người yêu thích đến vậy. Đây là sản phẩm máy rửa bát hoàn hảo, được ra đời dựa trên công nghệ hiện đại bậc nhất, cùng với sự nghiên cứu, thấu hiểu những nhu cầu thực tiễn của người dùng.
    Quý khách có nhu cầu đặt mua sản phẩm máy rửa bát Bosch vui lòng liên hệ qua:
    Website: https://bep365.vn – Hệ thống phân phối thiết bị nhà bếp - phòng tắm chính hãng
    Hotline: 0943 365 765 - (024) 36 865 865
    Email: hotro@bep365.vn

    Trả lờiXóa
  5. Công nghệ cảm ứng từ làm tăng hiệu suất nấu ăn của bếp lên tới 90%, năng lượng điện không những được sử dụng hiệu quả mà còn giúp phòng tránh khí thải độc hại từ việc đốt lửa Bếp từ hiện nay được rất nhiều người biết đến, ưa chuộng và được công nhận là một trong những giải pháp tối ưu nhất cho mọi gia đình, nấu nhanh, an toàn và hiệu quả nhất. Các loại bếp từ của Bosch luôn là một trong những lựa chọn hàng đầu của người tiêu dung, bởi thiết kế và chất lượng cũng như tiện ích mà nó đem lại luôn khiến họ phải bất ngờ.
    Điểm chung về mặt thiết kế của hai loại bếp từ này mà người tiêu dùng dễ dàng nhận thấy đó chính là chúng đều có dạng hình vuông với 3 vùng nấu được đặt cân đối và hợp lí. Đều là các loại bếp từ do Bosch sản xuất, nên cả Bosch ppi82560msBosch puc631bb2e đều sở hữu mặt kính Schott Crean đen bóng cao cấp của Đức, có khả năng chịu nhiệt, chịu lực và chống xước hoàn hảo, giúp kéo dài tuổi thọ cho sản phẩm.

    Bếp từ sử dụng trường điện từ sinh ra nhiệt ngay lập tức, giúp bạn có thể kiểm soát nhiệt độ tốt và dễ dàng điều khiển mức năng lượng và tiết kiệm điện năng rất nhiều. Nhiệt chỉ tạo ra khi bếp nhận biết được nồi/ chảo nấu đã được đặt trên bếp, tự động ngắt khi không sử dụng Cả hai loại bếp từ này đều sở hữu các chức năng đảm bảo an toàn cho thiết bị và an toàn cho người sử dụng như: Chức năng khóa tạm thời của bếp từ Bosch: ngay cả khi bếp đang hoạt động, bạn vẫn có thể lau chùi nếu sử dụng tính năng khóa tạm thời. Với biểu tượng bàn tay trên bảng điều khiển sẽ giúp bếp tạm dừng hoạt động trong thời gian ngắn để bạn có thể vệ sinh cho bếp, đảm bảo an toàn tuyệt đối cho người dùng. Cảnh báo nhiệt dư 2 cấp độ gồm dèn “H” báo hiệu nhiệt độ vùng nấu đang trên 60°C, đèn “h” biểu thị nhiệt độ đã hạ xuống dưới 60°C, mức an toàn, cho phép người dùng vệ sinh măt bếp, tránh tình trạng bị bỏng khi lau chùi bếp. Chức năng khóa trẻ em của bếp từ Bosch : đây là một chức năng hết sức cần thiết, đặc biệt đối với những gia đình có trẻ nhỏ hay nuôi động vật. Khi tính năng này được kích hoạt thì toàn bộ hệ thống sẽ bị vô hiệu hóa, tránh tình trạng trẻ em hay vật nuôi vô tình chạm vào hệ thống điều khiển, gây nguy hại.
    Tham khảo thêm các sản phẩm cùng loại:
    BOSCH PID675DC1E, BOSCH PID775DC1E, BOSCH PIJ651FC1E, BOSCH PIJ675FC1E, BOSCH PPI82560MS, BOSCH PUC631BB2E, BOSCH PUJ631BB2E

    Quý khách có nhu cầu đặt mua sản phẩm Bếp từ Bosch nhập khẩu vui lòng liên hệ qua:
    Bep365.vn – Hệ thống phân phối thiết bị nhà bếp - phòng tắm chính hãng
    Hotline: 0943 365 765 - (024) 36 865 865
    Email: hotro@bep365.vn

    Trả lờiXóa