2012-10-08 33 views
6

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?

Trả lời

2

Bạn hiện sử dụng LoginModule nào? Trong JBoss 6.1, bạn phải sử dụng ClientLoginModule để xác thực trong vùng chứa.

+0

Có! Đó là điểm. Tôi đã thêm ClientLoginModule và nó đã hoạt động. – roehrijn

0

Sự hiểu biết của tôi hiện tại không được hỗ trợ bởi JBoss AS 7.1. Xem this thread

Sửa

Những gì tôi viết ở đây là sai, sợi chỉ áp dụng cho bên đăng nhập khách hàng (bên ngoài của một JBoss).

+0

nó được hỗ trợ. Xem câu trả lời ở trên. – roehrijn

+0

Ah, vâng, đó là đăng nhập bên sever, tệ của tôi. –

+0

Không, Câu trả lời là không chính xác. Mã của tôi làm việc với ClientLoginmodule trong ngăn xếp LoginModule. – roehrijn

Các vấn đề liên quan