2009-07-27 43 views
14

Cách tốt nhất để thực hiện xác thực và ủy quyền cho một ứng dụng web JSF là gì? Tốt nhất là tôi vẫn muốn sử dụng bảo mật dựa trên vùng chứa, vì tôi cần phải gọi EJB yêu cầu hiệu trưởng.Xác thực và ủy quyền JSF

Tôi nhận ra xác thực dựa trên biểu mẫu là một cuộc đấu tranh lớn với JSF, nhưng tôi có thể sử dụng PhaseListener hoặc điều gì đó tương tự cùng với đăng nhập có lập trình để xác thực người dùng không?

Có phương pháp nào khác mà tôi nên xem không?

+0

Bạn có thể cho chúng tôi biết lựa chọn của bạn là gì? –

+0

Liên quan: http://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147 và http://stackoverflow.com/question/6189536/programmatically-control-login-with-servlet-3-0/6189810 # 6189810 – BalusC

Trả lời

3

Bạn có thể sử dụng khuôn khổ Xuân An, xem hướng dẫn tại đây http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

+0

Cảm ơn bạn đã đề xuất. Spring Security có thể được sử dụng bên ngoài Spring Framework không? Hiện tại tôi có JSF thẳng về phía trước với Facelets và tôi muốn tránh phụ thuộc vào Spring. – Zecrates

+0

Nó phụ thuộc vào một số mô-đun mùa xuân - web, lõi và một số phần khác (ví dụ jdbc nếu bạn giữ dữ liệu người dùng của mình trong cơ sở dữ liệu). Tuy nhiên, bạn không phải căn cứ vào ứng dụng của mình vào mùa xuân, chỉ coi nó là thư viện bên ngoài. –

+0

@ David: Xin chào David, Bạn có muốn nói điều gì đó về thời điểm chuyển từ bảo mật dựa trên container sang các lựa chọn thay thế như bảo mật mùa xuân hay những người khác không? Xem thêm câu hỏi tập trung ở đây: http: // stackoverflow.com/questions/7782720/khi-to-move-from-container-managed-security-to-alternatives-like-apache-shiro –

4

Hãy thử kiểm tra blog cho using JAAS with JSF. Đây là ví dụ về cách triển khai JAAS với JSF để xác thực và ủy quyền.

Tôi hy vọng điều đó sẽ hữu ích.

Tiger

+0

Cảm ơn bạn đã liên kết. Tôi không chắc chắn về một vài điều, tuy nhiên. Tôi cho rằng điều này sẽ thay thế xác thực dựa trên mẫu, nhưng nó tương tác với mô-đun đăng nhập JAAS của tôi như thế nào (trong Glassfish một lĩnh vực). Tôi đang sử dụng một lĩnh vực JDBC. Ngoài ra, không phải là một PhaseListener phù hợp hơn cho điều này hơn là một ActionListener? – Zecrates

+0

@Tiger: Bạn có muốn nói điều gì đó về thời điểm chuyển từ an ninh container sang các lựa chọn thay thế như shiro hay những người khác không? Xem thêm câu hỏi tập trung ở đây: http: //stackoverflow.com/questions/7782720/when-to-move-from-container-managed-security-to-alternatives-like-apache-shiro –

3

tôi sử dụng JSF Seam và đã sử dụng Seam tích hợp trong xác thực và ủy quyền và thấy nó cực kỳ dễ sử dụng.

Để xác thực, bạn chỉ cần triển khai 1 phương thức, public boolean login(String username, a String password) { ... } và trả về boolean. Sau đó, bạn có thể đánh dấu các trang là "yêu cầu đăng nhập" và đường may sẽ xử lý phần còn lại.

Để ủy quyền, Seam cung cấp cho bạn @Restrict Chú thích mà bạn có thể đặt trên Bộ điều khiển hoặc Phương thức dịch vụ và một lần nữa, Seam sẽ đảm nhiệm phần còn lại.

Cấp quyền nâng cao: Bạn cũng có thể xử lý thêm advanced authorization with Seam nơi vai trò động - ví dụ: trong một bảng thông báo, bạn là "tác giả" của một số bài đăng, nhưng "người đọc" hoặc các bài đăng khác, chỉ cần ủy quyền chú thích @Restrict của bạn cho một phương thức Java.

Tôi sẽ khuyến khích bạn xem qua Đường may. Seam chỉ là một lớp trên đầu trang của JSF vì vậy về mặt kỹ thuật bạn vẫn sẽ chạy trên JSF. Nếu vì một số lý do bạn không thể sử dụng Seam, có thể bạn có thể mượn một số ý tưởng từ cách Seam xử lý Ủy quyền và Xác thực trong JSF.

2

Bạn có thể sử dụng API Servlet 3.0 HttpServletRequest như trong câu trả lời này cho một người 2,0 câu hỏi JSF:

JSF 2.0 Simple login page

+0

Đây không phải là một phần của JSF 2. Đây là một phần của Servlet 3.0. Vì vậy, điều này chỉ hoạt động khi chạy JSF 1.x/2.x/bất cứ thứ gì trên Tomcat 7, Glassfish 3, JBoss AS 6, v.v. hoặc mới hơn. – BalusC

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