Theo tôi, bạn đang đi sai hướng. Sử dụng phương pháp thay đổi mật khẩu của bạn vào LoginModule có một số vấn đề.
- Đăng nhập người dùng thường được cho là quá trình "an toàn" tức là xử lý các tác dụng phụ "không có".
- Sử dụng
TextInputCallback
để yêu cầu hộ chiếu mới ít nhất là lạ. TextInputCallback
có nghĩa là yêu cầu người dùng nhập văn bản thông thường chứ không phải mật khẩu, ví dụ như yếu tố xác thực thứ hai như mã PIN (01)Ứng dụng khách thực hiện CallbackHandler
không biết rằng đó là mật khẩu có thể phải được đeo mặt nạ khi được hiển thị trên scren.
- Cách tiếp cận vi phạm nguyên tắc chịu trách nhiệm duy nhất của LoginModule - một LoginModule chịu trách nhiệm đăng nhập/xác thực người dùng.
Hãy nhớ rằng thường thay đổi mật khẩu bạn cần người dùng được xác thực/ủy quyền phải xác nhận thay đổi mật khẩu bằng cách nhập lại mật khẩu cũ của mình và thường cung cấp trường thứ hai nơi người dùng có thể quay lại -nhập mật khẩu mới của mình. Chỉ một xxxCallback
có vẻ không đủ.
Ngay cả một không nên sử dụng Exceptions
cho luồng kiểm soát tôi khuyên bạn nên sử dụng CredentialExpiredException
để báo hiệu cho khách hàng rằng người dùng phải thay đổi mật khẩu. Đây cũng là cách Oracle hiện nó trong một trong những WebLogic JAAS Examples
Sau khi tất cả những nhận xét của tôi nếu bạn vẫn muốn/cần phải đặt nó vào phong tục LoginModule
sau đó tôi muốn đề nghị phải xác định riêng Callback
s của bạn ví dụ PasswordChangeCallback
hoặc ConfirmPasswordCallback
, NewPasswordCallback
, VerifyNewPasswordCallback
Bạn chỉ có thể thêm chúng vào tùy chỉnh LoginModule
không có cần phải đăng ký họ. Hãy nhớ rằng các máy khách chuẩn có thể có vấn đề với các cuộc gọi lại bổ sung này. Khách hàng của bạn sau đó phải triển khai CallbackHandler
tương ứng.
Trong JAAS có hai cách để tùy chỉnh sử dụng CallbackHander
* bằng cách cấu hình mặc định tùy chỉnh CallbackHandler
Từ CallbackHandler API documentaion
Một thi lớp CallbackHandler mặc định có thể được quy định trong auth.login .defaultCallbackHandler tài sản bảo mật. Thuộc tính bảo mật có thể được đặt trong tệp thuộc tính bảo mật Java nằm trong tệp có tên /lib/security/java.security. đề cập đến giá trị của thuộc tính hệ thống java.home và chỉ định thư mục nơi JRE được cài đặt.
hoặc bằng cách chuyển làm đối số cho hàm tạo của LoginContext
. Các LoginContext
cung cấp hai cấu trúc mà chấp nhận một CallbackHandler
public LoginContext(String name, CallbackHandler callbackHandler)
throws LoginException
public LoginContext(String name, Subject subject,
CallbackHandler callbackHandler) throws LoginException
thấy LoginContext API Documentation
Làm thế nào để nó tích hợp với loại bỏ?
Nó cũng giống như cách bạn đã làm. Không có nhiều khác biệt.
Khách hàng chất béo của chúng tôi nhận được TextInputCallback
như thế nào?
Via CallbackHandler
Giao diện tương tự như PasswordCallback
. Bạn đã đề cập rằng Mô-đun đăng nhập sử dụng CallbackHandler
.
void handle(Callback[] callbacks)
Nếu bạn muốn biết làm thế nào để thực hiện các phương pháp handle
CallbackHandler
API Documentation cũng cung cấp một ví dụ về việc thực hiện các phương pháp CallbackHandler
handle
.