2012-05-26 23 views
8

Gần đây tôi đã phát triển một ứng dụng web tomcat trong JSP sử dụng bảo mật khai báo (server.xml/web.xml) gắn với Active Directory của công ty. Tôi đã được yêu cầu thêm hỗ trợ JSF cho dự án còn non trẻ. Đó là một vấn đề đơn giản để chuyển đổi biểu mẫu đăng nhập thành jsf và mô hình bảo mật vẫn hoạt động.Is (isUserInRole()) là cách dễ nhất để đính kèm quyền người dùng/bảo mật vào nút JSF?

Một liên kết hỏi liệu tôi có thể cho phép đối tượng rộng hơn xem một trong các báo cáo hay không, nhưng chỉ hiển thị các nút tác vụ cho một nhóm nhỏ hơn. Mới làm quen với JSF, tôi phải làm một số nghiên cứu.

Tôi đã dành khoảng bốn giờ những thứ googling như "bảo mật nút jsf" và "quyền nút jsf" và thử các đề xuất khác nhau mà phần lớn đã chết. Một cộng sự khác đã đề xuất sử dụng mô hình bảo mật Spring, nhưng tôi không muốn xử lý toàn bộ các thư viện Spring nếu có một cách dễ dàng hơn để thực hiện nó.

Cuối cùng, tôi tình cờ gặp câu trả lời, điều cực kỳ đơn giản. Tôi chỉ cần sử dụng phương thức HttpServletRequest: isUserInRole() để xác định xem người dùng hiện đang đăng nhập có quyền xem các nút hành động hay không. Tôi đã sử dụng HttpServletRequests một LOT trong mười năm qua, nhưng tôi không nhớ bao giờ học về phương pháp đó. Với JSF, đó là một vấn đề đơn giản để có được phương pháp đó, như hình dưới đây:

public boolean isUserInRole(String role) { 
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role)); 
} 

Câu hỏi của tôi đặc biệt là: đang có bất kỳ gotchas về cách tiếp cận này, tôi cần phải nhận thức, và là có một cách dễ dàng hơn để làm nó?

+2

Nó có thể được thực hiện đơn giản hơn trong EL mà không cần một bean sao lưu: '# {request.isUserInRole ('foo')}' – BalusC

+0

nhưng trong một bean được quản lý jsf, bạn sẽ không có quyền truy cập vào yêu cầu, đúng? –

+0

Tôi hiếm khi có nhu cầu cho nó trong một đậu ủng hộ. Chỉ cần đặt nó vào các thuộc tính 'rendered',' readonly' hoặc 'disabled' trong khung nhìn. – BalusC

Trả lời

1

Nếu bạn sử dụng Tomahawk làm phần bổ trợ cho việc triển khai JSF của bạn, hầu hết các điều khiển đều có thuộc tính visibleOnUserRole. Bạn có thể sử dụng nhiều tên vai trò trong giá trị.

+0

đây là thông tin thực sự tốt, tôi thực sự không biết gì về addon tomahawk, có vẻ là một số thứ tốt. Một câu hỏi, nếu tôi sử dụng tomahawk và các nguyên tố, bạn có nghĩ rằng tôi có thể thêm thuộc tính visibleOnUserRole vào một điều khiển các dấu phẩy (ví dụ: p: commandButton) không? –

+0

Tôi đang trả lời câu hỏi của riêng mình về các thủ tướng và visibleOnUserRole với liên kết này: http://cagataycivici.wordpress.com/2010/03/18/primefaces-el-extensions-for-ui-authorization/ –

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