2009-07-27 21 views
14

Jaki jest najlepszy sposób wdrożenia uwierzytelniania i autoryzacji dla aplikacji WWW JSF? Zasadniczo nadal chciałbym używać zabezpieczeń opartych na kontenerach, ponieważ muszę wywoływać EJB, które wymagają głównego.Autoryzacja i autoryzacja JSF

Uświadamiam sobie, że uwierzytelnianie oparte na formularzach jest poważną walką z JSF, ale czy mogę użyć PhaseListener lub czegoś podobnego razem z logowaniem programistycznym do uwierzytelnienia użytkownika?

Jakieś inne metody, na które raczej powinienem spojrzeć?

+0

można pozwolić nam znać co był twój pick? –

+0

Powiązane: http://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147 i http://stackoverflow.com/questions/6189536/programme-control-login-with-servlet-3-0/6189810 # 6189810 – BalusC

Odpowiedz

3

Można użyć ramy Wiosna zabezpieczeń, patrz instrukcja tutaj http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

+0

Dzięki za sugestię. Czy Spring Security może być używany poza Spring Framework? Obecnie mam bezpośredni JSF z Facelets i chciałbym uniknąć dodatkowej zależności od Spring. – Zecrates

+0

Zależy to od kilku modułów sprężyn - web, core i kilku innych (na przykład jdbc, jeśli przechowujesz dane użytkownika w bazie danych). Nie musisz opierać swojej aplikacji na wiosnę, ale potraktuj ją jako bibliotekę zewnętrzną. –

+0

@ David: Witaj Davidzie, chciałbyś powiedzieć coś o tym, kiedy dobrze jest przejść od ochrony kontenerowej do alternatywnych rozwiązań, takich jak bezpieczeństwo wiosenne czy inne? Zobacz bardziej szczegółowe pytanie tutaj: http: // stackoverflow.com/questions/7782720/when-to-move-from-container-managed-security-to-alternatives-like-apache-shiro –

4

Spróbuj sprawdzeniu bloga using JAAS with JSF. Jest to przykład tego, jak wdrożyć JAA z JSF do uwierzytelniania i autoryzacji.

Mam nadzieję, że to pomaga.

Tiger

+0

Dzięki za link. Nie jestem jednak pewna kilku rzeczy. Zakładam, że to zastąpi uwierzytelnianie oparte na formularzach, ale w jaki sposób wchodzi w interakcję z moim modułem logowania JAAS (w Glassfish - dziedzina). Używam sfery JDBC. Ponadto, czy PhaseListener nie jest lepszym rozwiązaniem niż ActionListener? – Zecrates

+0

@ Tiger: Czy chciałbyś powiedzieć coś o tym, kiedy dobrze jest przejść od ochrony opartej na kontenerach do alternatyw, takich jak shiro czy inni? Zobacz bardziej szczegółowe pytanie: http: //stackoverflow.com/questions/7782720/when-to-move-from-container-managed-security-to-alternatives- like-apache-shiro –

3

używam JSF Seam i wykorzystali Seam wbudowanego w uwierzytelniania i autoryzacji i uważają, że jest bardzo łatwy w użyciu.

W celu uwierzytelnienia wystarczy wdrożyć 1 metodę, public boolean login(String username, a String password) { ... } i zwraca wartość boolean. Następnie możesz oznaczyć strony jako "wymagane logowanie", a szew zajmie się resztą.

W celu autoryzacji, Seam daje Ci @Restrict Adnotację, którą możesz umieścić na swoich kontrolerach lub metodach Obsługi i znowu Seam zajmie się resztą.

Zaawansowane autoryzacja: można również obsłużyć więcej advanced authorization with Seam, w której role są dynamiczne - np. na tablicy ogłoszeń jesteś "autorem" niektórych postów, ale "czytelnika" lub innych postów, po prostu delegując swoją adnotację @Restrict do metody Java.

Zachęcam do obejrzenia Seam. Seam jest tylko warstwą na szczycie JSF, więc technicznie nadal będziesz działał na JSF. Jeśli z jakiegoś powodu nie możesz użyć Seam, możesz pożyczyć kilka pomysłów od tego, jak Seam obsługuje autoryzację i uwierzytelnianie w JSF.

2

Można użyć Servlet API 3.0 HttpServletRequest, jak pokazano w tym odpowiedzi na pytania: JSF 2.0

JSF 2.0 Simple login page

+0

To nie jest częścią JSF 2. Jest to część Servlet 3.0. Działa to tylko podczas działania JSF 1.x/2.x/cokolwiek na Tomcat 7, Glassfish 3, JBoss AS 6, itp. Lub nowszym. – BalusC