Tôi đang cố gắng để chạy mã trong JBoss container dưới một xác thực khác nhau bằng cách programatically đăng nhập người dùng như thế (xử lý ngoại lệ tước):Đăng nhập người dùng lập trình qua JAAS
LoginContext ctx = ctx =
new LoginContext("MyLoginSchema",
new UsernamePasswordCallbackHandler("newuser", "")
);
ctx.login();
Subject.doAs(ctx.getSubject(), new PrivilegedAction<T>() {
@Override
public T run() {
Subject.getSubject(AccessController.getContext());
InitialContext ic = new InitialContext();
EJBContext sctxLookup = (EJBContext) ic.lookup("java:comp/EJBContext");
Principal principal = sctxLookup.getCallerPrincipal();
}
});
nhập của newuser
công trình (Gọi của LoginModule
đã thành công) nhưng Subject.doAs()
không liên kết Chủ đề mới với EJBContext
. Mã trong số run()
-Phương pháp vẫn tìm nạp nguyên tắc của người dùng cũ từ EJBContext
.
Tôi đã thử nghiệm một phương pháp thu hồi sử dụng đăng nhập nhưng cùng một hành vi ở đây:
Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Bất kỳ ý tưởng?
Có! Đó là điểm. Tôi đã thêm ClientLoginModule và nó đã hoạt động. – roehrijn