Tôi đang phát triển một ứng dụng Java EE 6 bằng Glassfish 3.1, B06. Để bảo mật ứng dụng của tôi, tôi đang sử dụng bảo mật JDBCRealm và chương trình. Điều này hoạt động tốt để kiểm tra tên người dùng và mật khẩu. Nhưng khi nói đến tuyên bố vai trò bảo mật, tôi có vấn đề:Tự động thêm vai trò bảo mật Java EE mà không sử dụng mô tả triển khai
Để sử dụng Vai trò bảo mật trong Java EE 6, tôi phải khai báo vai trò đó trong bộ mô tả triển khai EJB và trong mô tả triển khai Glassfish cụ thể để liên kết vai trò (như được giải thích trong các Java EE 6-tutorial) Chỉ hơn tôi có thể sử dụng phương pháp isCallerInRole (String roleRef) bên trong EJB để kiểm tra quyền. Điều này là không mong muốn cho ứng dụng của tôi, vì tôi muốn có thể thêm vai trò bảo mật cả động và lập trình, mà không cần phải viết các tệp XML (và ví dụ như có thể xác định tên vai trò trong cơ sở dữ liệu).
Tôi vừa sửa lỗi thông qua mã nguồn GF3 và thấy việc triển khai isCallerInRole trong com.sun.ejb.containers.EjbContextImpl. Có container được vai trò ra khỏi mô tả EJB:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
Tôi nhìn quanh và phát hiện ra rằng nếu tôi bằng cách nào đó có thể nhận được các mô tả EJB bên trong ứng dụng của tôi, tôi có thể thêm một vai trò như thế này:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
Bất cứ ai đã làm điều gì đó như thế này, hoặc có một số suy nghĩ về nó? Có thể sử dụng bộ mô tả triển khai Ejb bên trong ứng dụng của tôi không? Hoặc có cách tiếp cận tốt hơn?
P.S. hoặc tôi nên sử dụng MBeans để thêm Vai trò? Đã tìm thấy một bài đăng khá liên quan here.
Ngoài ra, tôi khuyến khích bạn chuyển sang phiên bản mới hơn của GlassFish Server 3.1. Nhóm gần đây đã phát hành phiên bản 22. – vkraemer
Cảm ơn bạn. Thật không may, chúng tôi có một số thư viện mà phá vỡ ở phiên bản cao hơn Glassfish, vì vậy chúng tôi phải gắn bó với 06 cho đến khi một số lỗi trong các libs được cố định – ifischer