2012-05-13 16 views
6

Tôi đang ở trong môi trường Jboss AS 7. Đường dẫn của ứng dụng/admIn/* của tôi được bảo vệ bởi một ràng buộc bảo mật yêu cầu xác thực dựa trên biểu mẫu. Miền bảo mật là cơ sở dữ liệu được sao lưu.JBoss AS 7 bảo mật: làm thế nào để có được tên đăng nhập hiện đang đăng nhập?

Ok, nhưng bây giờ tôi muốn hiển thị "buổi sáng tốt" trong tiêu đề của mỗi trang. Tôi đang tìm một số loại hàm getLoggedUsername() hoặc getPrincipal() nhưng tôi không thể tìm thấy nó.

Vui lòng đăng tham chiếu đến tài liệu chính thức nếu có. Cảm ơn bạn.

+0

Có vẻ là một bản sao, chỉ tìm thấy nó là http://stackoverflow.com/questions/1938517/how-to-get-sessioncontext-in-jboss nhưng tôi thấy rằng bất kỳ ai tìm thấy câu hỏi này sẽ không tìm thấy câu hỏi khác mà không biết nhìn vào JAAS trước. –

Trả lời

9

Bạn sẽ có thể sử dụng JAAS. Đó là những gì JBoss 7 nên được sử dụng.

Hiệu trưởng gọi sẽ được lưu trữ trong một SessionContext mà bạn có thể có được bằng cách cho JBoss biết đó là tài nguyên.

@Resource 
private SessionContext context; 

public void myAwesomeMethod() { 
    String currentUser = context.getCallerPrincipal().getName(); 
} 

Nếu vì một lý do tiêm không hoạt động trên một bean không quốc tịch, bạn có thể tra cứu EJBContext trực tiếp.

@Stateless 
public class HelloBean implements com.foo.ejb.HelloRemote { 
    public void hello() { 
     try { 
      InitialContext ic = new InitialContext(); 
      SessionContext sctxLookup = 
       (SessionContext) ic.lookup("java:comp/EJBContext"); 
      System.out.println("look up EJBContext by standard name: " + sctxLookup); 
     } catch (NamingException ex) { 
      throw new IllegalStateException(ex); 
     } 
    } 
} 

Đoạn mã này được lấy từ 4 ways to obtain EJBContext.

+0

Ok. Bạn sẽ đặt mã đó ở đâu? Một ejb nhà nước? –

+0

@FabioB. Nó không phải là nhà nước. Tôi sẽ cập nhật Câu trả lời của mình bằng một cách khác để lấy nó. Bạn sẽ có thể sử dụng Injection với một bean không quốc tịch, nhưng nếu điều đó không làm việc, bạn có thể tra cứu trực tiếp Context. –