SECURITY TRONG WICKET FRAMEWORK

Bảo mật (security) là vấn đề tối quan trọng trong phần mềm nói chung, đặc biệt trong ứng dụng web. Topic này tôi tìm hiểu và giới thiệu về bảo mật trong Wicket framework. Bảo mật trong Weket framework cũng thông qua hai bước cơ bản là Authentication (Xác thực người dùng), và Authorizations (Xác thực quyền sử dụng).

1. Authentication

Wicket framework hỗ trợ tạo login form với hai lớp là lớp session AuthenticatedWebSession và lớp ApplicationAuthenticatedWebApplication. Cả hai lớp đều chứa trong gói thư viện org.apache. wicket.authroles.authentication.

1.1 AuthenticatedWebSession

Lớp AuthenticatedWebSession cung cấp các public method để quản lý việc xác thực người dùng sau:

  • authenticate(String username, String password): hàm này là hàm abstract, bởi vậy các lớp kế thừa lớp fffff đều phải ghi đè hàm này (ta sẽ viết hàm xác thực thông tin user với dữ liệu DB ở hàm này). Hàm này sẽ trả về giá trị true nếu xác thực thành công, và trả về false trong trường hợp ngược lại.
  • signIn(String username, String password): đây là hàm trung gian gọi hàm authenticate, và nó cũng trả về giá trị true/flase từ hàm authenticate.
  • Hai hàm gettersetter trạng thái signedIn là isSignedIn() và signOut().
  • invalidate(): hàm này sẽ gọi hàm signOut và remove session. Để loại bỏ dữ liệu đã lưu trong session thì ta phải gọi phương thức này, vì hàm signOut không remove session mà chỉ gán trạng thái signedIn = false.
  • getRoles(): hàm này cũng là hàm abstract, khi thực thi hàm này chúng ta tạo role list cho user.

1.2 AuthenticatedWebApplication

Lớp AuthenticatedWebApplication cung cấp các public method để quản lý việc xác thực người dùng sau:

  • getWebSessionClass(): là hàm abstract, thực thi hàm này để trả về lớp session sử dụng cho ứng dụng xác thực người dùng. Do vậy lớp trả về phải là lớp con của lớp AuthenticatedWebSession đã giới thiệu mục A.
  • getSignInPageClass(): là hàm abstract, hàm này trả về trang login
  • restartResponseAtSignInPage(): Hàm này trả về trang trước khi use được yêu cầu login lại.

1.3 Một ví dụ về lớp kế thừa lớp AuthenticatedWebSession và lớp AuthenticatedWebApplication

Lớp Session

    public class BasicAuthenticationSession extends AuthenticatedWebSession {
        public BasicAuthenticationSession(Request request) {
            super(request);
        }
        @Override
        public boolean authenticate(String username, String password) {
            //code check user info (username, password) with user database info
            return username.equals(password) && username.equals("wicketer");
        }
        @Override
        public Roles getRoles() {
            Roles roles = new Roles();
            //Code process get role form DB of user
            if([useraccountType is Addmin]) roles.add(Roles.ADMIN)
            if([useraccounType is Approver]) roles.add([APPROVER)
            return roles;
        }
    }

Lớp Application

    public class WicketApplication extends AuthenticatedWebApplication{
        @Override
        public Class<HomePage> getHomePage(){
            return HomePage.class;
        }
        @Override
        protected Class<?> extends AbstractAuthenticatedWebSession> getWebSessionClass(){
            return BasicAuthenticationSession.class;//Lóp con kế thừa lớp AuthenticatedWebsession ở trên
        }
        @Override
        protected Class<? extends WebPage> getSignInPageClass() {
            return SignInPage.class;
        }
    }

2. Authorizations

(Vì thời gian có hạn và nội dung phức tạp nên phần này xin được trình bày vào tháng sau.)


All Rights Reserved