SECURITY TRONG WICKET FRAMEWORK
Bài đăng này đã không được cập nhật trong 9 năm
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
getter
vàsetter
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 loginrestartResponseAtSignInPage()
: 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