2010-02-09 30 views
11

Tôi muốn quản lý người dùng và vai trò trong một ứng dụng chuyên dụng. Ví dụ một người dùng của ứng dụng này ("customerX boss") có thể tạo một vai trò mới "customerX employee". Nếu một nhân viên truy cập vào máy chủ ứng dụng Java EE (GlassFish 3), anh ta sẽ nhận vai trò "employeeX employee".vai trò động trên máy chủ Java EE

Nghe có vẻ đơn giản, nhưng nó không được hỗ trợ bởi Java EE, bởi vì các nhóm được ánh xạ tới vai trò lúc khởi động và vai trò trong ứng dụng là tĩnh.

Cách tốt nhất để quản lý vai trò người dùng khi chạy trong môi trường Java EE (6) là gì?

+2

Tôi đã tạo https://java.net/jira/browse/JAVAEE_SPEC-20 để hỗ trợ (trong số những trường hợp khác) trường hợp sử dụng này. Nếu bạn hoặc bất kỳ ai khác vẫn bị làm phiền bởi sự thiếu năng động trong các vai trò của Java EE, hãy bỏ phiếu cho nó hoặc để lại nhận xét. –

Trả lời

11

Bảo mật khai báo trong Java EE thực sự không phù hợp với các yêu cầu đó. Vấn đề an ninh có thể được chia làm hai:

  • xác thực
  • uỷ quyền

tôi đã yêu cầu tương tự một lần. Chúng tôi đã sử dụng xác thực được tích hợp sẵn để có tập hợp chính và dựa vào các cơ chế đăng nhập Java EE mặc định. Nhưng chúng tôi đã kết thúc việc quản lý phần ủy quyền theo cách thủ công ở cấp ứng dụng.

Thật vậy, ngay cả những vai trò đó sẽ được nạp và kết hợp với hiệu trưởng (isUserInRole cho web và isCallerInRole cho EJB) cần phải được quy định tại web.xml hoặc ejb.xml mà không cung cấp đủ linh hoạt. Sau đó chúng tôi đã tải các vai trò theo cách thủ công (theo hiệu trưởng) từ LDAP hoặc ActiveDirectory. Sau đó chúng tôi sử dụng bộ chặn EJB3 và bộ lọc Servlet để tự mình thực hiện kiểm tra bảo mật.

Tuy nhiên, tôi khuyên bạn nên tuân theo điều khiển truy cập dựa trên vai trò (RBAC) và không thực hiện điều gì đó lạ mắt hơn. Có một số khung công tác có thể giúp giải quyết RBAC sản xuất trong nước.

Chúng tôi cũng đã xem JSecurityAcegi Security và chúng có vẻ thú vị.

+0

Cảm ơn câu trả lời của bạn, đặc biệt là gợi ý rằng ngay cả các vai trò thiết lập động phải được khai báo tĩnh trong tệp web.xml hoặc ejb.xml! Đó sẽ là sự tiếp theo cho tôi. Tôi sẽ kiểm tra JSecurity một Spring Security (người kế nhiệm của Acegi) http://static.springsource.org/spring-security/site/index.html. – deamon

+1

JSecurity bây giờ được gọi là "Shiro". http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

Có, các vai trò được khai báo với '' hoặc '@ DeclaredRoles' thực sự là các tên biểu tượng cần được ánh xạ tới vai trò trong thư mục bên ngoài (ví dụ LDAP) bằng cách sử dụng ''. Nếu ánh xạ là 1 đến 1, Glassfish có tùy chọn "mặc định chính để ánh xạ vai trò", nhưng đó chỉ là một nửa của giải pháp và bạn vẫn phải liệt kê vai trò ở đâu đó. – ewernli

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