Bổ sung module bảo mật JAAS
Đã lý luận quá nhiều, bây giờ là thời gian để xem xét những bước đòi hỏi việc bổ sung JAAS như một module. Việc bổ sung dưới đây được phát triển để cung cấp bảo mật cho một ứng dụng Java Mail. Để viết những bổ sung tùy biến, sử dụng những bước sau:
* Bổ sung LoginModule
* Viết CallBackHandler
* Cung cấp các bổ sung tùy biến cho Principal và Action (đây là lựa chọn)
* Cấu hình file JAAS policy
* Cấu hình J2EE Application Server
Trước khi đi vào chi tiết của bổ sung, package mà bạn cần phải import là javax.security
Bổ sung LoginModule
LoginModule là một trong những module cốt lõi của JAAS. Nó đóng gói tính logic của việc chứng thực dành cho JAAS framework. Để bổ sung LoginModule, một trong bốn method sau phải được override.
* login()
Method này thực thi các tác nhiệm trong việc thu thập thông tin đăng nhập và việc chứng thực user. Nói một cách ngắn gọn, tính logic để chứng thực một user là ở đây. Việc thu thập thông tin đăng nhập được thực hiện như dưới đây
Hiển nhiên là trong đoạn mã ở trên, thông tin đăng nhập được thu thập sử dụng CallBackHandler. Một khi thông tin đăng nhập được tập hợp với nhau, method login sẽ cố gắng để kết nối với server. Nếu kết nối được, method sẽ trả về true. Đoạn mã nhỏ dưới đây chỉ ra thủ tục đó:
Trong khối lênh try – catch, nó cố gắng để kết nối với LDAP server với thông tin đã được tập hợp. Nếu kết nối thành công (dĩ nhiên, method InitialDirContext() không ném ra các ngoại lệ), biến chứng thực được set là true. Ở đây, thay vì LDAP server, database server được sử dụng như là server dành cho việc chứng thực.
* commit()
Method này set username đã được kiểm tra trong session context. Mã thể hiện subject với các vai trò và các credential (chẳng hạn như các private key) bất kỳ cũng ở đây.
* abort()
Method này được gọi khi việc chứng thực LoginContext bị lỗi. Method này cũng được tự động thực thi bởi runtime nếu như một runtime exception xảy ra. Để tạo nên xử lý tùy biến trong trường hợp việc chứng thực bị lỗi này, đoạn mã thực hiện như sau
* logout()
Bất kỳ khi nào user đăng xuất, method này sẽ được gọi. Vì thế, nếu bạn muốn gỡ bỏ một vài credential hay giải phóng tài nguyên nắm giữ bởi user bạn có thể thực hiện ở đây. Đoạn mã sử dụng như dưới đây:
Viết CallBackHandler
Để tập hợp thông tin chứng thực của user, LoginModule sử dụng javax.security.auth.callback.CallBackHandler. Một application bổ sung interface này và truyền nó cho LoginContext. LoginContext sau đó chuyển tiếp nó cho LoginModules nằm dưới. Vì thế, dữ liệu được tập hợp có thể gồm một cặp từ các bổ sung chứng thực. Một phần của bổ sung CallBackHandler là kiểu dữ liệu được sử dụng để kiểm tra user. Dưới đây là đoạn mã mà CallBackHandler sử dụng trong application của chúng ta. Tạo một class bổ sung interface CallBackHandler và override method handle()
Cung cấp các bổ sung tùy biến cho Principal và Action
Đây là một bước lựa chọn. Bước này hữu dụng khi lưu trữ username và so sánh nó với một login mới. Cũng như những bước trước, bắt đầu bằng việc tạo ra một class. Nếu tôi sử dụng class này để so sánh hai userPrincipal chúng ta thực hiện việc đó trong method equals()
Đầu tiên, đoạn mã kiểm tra đối tượng null. Sau đó, nó kiểm tra xem các đối tượng có giống nhau không. Một khi điều đó được thực hiện xong, nó gán đối tượng cho một đối tương kiểu userPrincipal và kiểm tra xem giá trị được chứa trong nó có bằng nhau không. Chỉ có một method được override là getName(). Trong trường hợp của chúng ta nó chỉ trả về tên được chứa trong đối tượng userPrincipal truyền đi.
Kế tiếp là bổ sung cho PrivilagedAction. Bằng cách làm điều này, chúng ta có thể điều khiển việc truy cập tài nguyên trên các quyền cơ bản vào thời điểm thực.
Tạo ra một bổ sung tùy biến bằng việc bổ sung PrivilagedAction interface. Sau đó override method run() như đã được chỉ dưới đây. Những bổ sung có thể khác.
Ở đây, chúng ta chỉ kiểm tra sự file tồn tại của file. Method exists() trả về true chỉ nếu như đối tượng file có quyền truy cập đến. Trong trường hợp này, đối tượng file chỉ có quyền nếu như nó nằm trong thư mục nhà của user.
Cấu hình file JAAS policy
Việc cấu hình JAAS policy được thực hiện trong các file .policy. Chỉ có một LoginModule là được cấu hình cho module bảo mật. Các policy được set trong user.policy và user_jaas.conf
User.policy:
Bây giờ có một vài sự giải thích. Đầu tiên là toàn bộ việc cấp quyền cho userLoginModule. UserLoginModule được xem như được cung cấp đầy đủ. Vì thế nó có tất cả các quyền. Thứ hai là toàn bộ việc cấp quyền cho bản thân chương trình, khi ứng dụng không được cung cấp đầy đủ. Vì thế subject được chứng thực đầu tiên, và Subject.doAs được gọi cùng với subject đó và một userAction, có thể truy cập thuộc tính hệ thống – java.home, user, home và file tips.html. Bây giờ là user_jaas.conf. Nó cung cấp tên ứng dụng và các tham số yêu cầu
Cấu hình J2EE Application Server
Bước này thay đổi với mỗi application server, vì thế nên tra cứu trong các tài liệu được cung cấp bởi vendor
[HaiPhong-Aptech]