2013-03-06 16 views
6

Używam OpenId4Java z aplikacji JSF Dodałem ograniczeń związanych z bezpieczeństwem w moim web.xml coś takiego ..OpenId + JSF przekierowuje użytkownika na stronę, na której się loguje?

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Restricted</web-resource-name> 
     <url-pattern>/core/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
</security-constraint> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
    <form-login-page>/user/login.xhtml</form-login-page> 
    <form-error-page>/user/logout.xhtml</form-error-page> 
    </form-login-config> 
</login-config> 

Teraz podczas startu aplikacji i użytkownik chce uzyskać dostęp do

http://www.somehost:8080/myapp/core/abc.xhtml

przy pomocy web.xml Jestem w stanie pokazać użytkownikowi stronę logowania tutaj, wpisuję login z otwartymi, takimi jak Google, Ya hoo teraz moje pytanie jest, że jak mogę powiedzieć OpenID że moja powrót url jest

http://www.somehost:8080/myapp/core/abc.xhtml

Lub jeśli użytkownik pochodzących z

http://www.somehost:8080/myapp/core/xyz.xhtml

to url, a następnie po udanym logowaniu użytkownik przejdzie ten pa ge.

+0

Możecie znaleźć kod z tego [LINK] (http://crisdev.wordpress.com/2011/03/23/openid4java-login-example/) pożytecznego. – rrufai

+0

Dzięki, ale nie rozumiem, w jaki sposób utworzy adres URL powrotu, od teraz wyświetlam stronę logowania dla każdego linku –

+0

ahm Czy używasz filtra internetowego? – Farnsbert

Odpowiedz

0

Aby uzyskać oryginalny adres URL, do którego użytkownik próbował uzyskać dostęp, należy użyć zmiennej RequestDispatcher.FORWARD_REQUEST_URI.

Ta zmienna będzie dostępna tylko wtedy, gdy nastąpi przekierowanie do strony logowania z innej ograniczonej strony. Pamiętaj więc, aby mieć domyślny URL, na wypadek gdyby użytkownik bezpośrednio trafił na stronę logowania.

Jak zauważył Rrufai, po oryginalnym adresie URL, o który prosił użytkownik, można wykonać kroki wymienione w artykule this article, aby przekierować do tego adresu URL po zakończeniu uwierzytelniania.

+0

Ale używam web.xml tag kontekstowy bezpieczeństwa i na każdej stronie, jeśli użytkownik nie jest zalogowany i web.xml pokazuje login.xhtml stronę –

+0

Od kiedy używasz JSF, możesz spróbować użyć [RequestDispatcher.FORWARD_REQUEST_URI] (http://docs.oracle.com/ javaee/6/api/javax/servlet/RequestDispatcher.html # FORWARD_REQUEST_URI), ponieważ strona logowania jest otwierana przez serwer do przodu? Ta zmienna będzie dostępna tylko wtedy, gdy nastąpi przekierowanie do strony logowania z innej ograniczonej strony. Pamiętaj więc, aby mieć domyślny URL, na wypadek gdyby użytkownik bezpośrednio trafił na stronę logowania. –

+0

Nadal daje mi adres logix.xhtml strona –

0

Użyj przekierowania, aby przekazać sterowanie na następnej stronie.

String returnToUrl = returnToUrl("/nextPage.xhtml"); 
FacesContext.getCurrentInstance().getExternalContext().dispatch(returnToUrl); 

Wystarczy popatrzeć na to:

http://blog.enterpriselab.ch/tdmarti/2011/04/06/openid-in-a-web-application-based-on-java-ee-and-jsf-2-0/

Aktualizacja:

celu identyfikacji, z którego strona wniosek został złożony proszę odnieść się do tych wypowiedzi:

How to get the previous page URL from request in servlet after dispatcher.forward(request, response)

How to get the original request url from a servlet/jsp after multiple servlet forwards

http://www.coderanch.com/t/361942/Servlets/java/Track-Jsp-request-coming-Servlet

+0

to jest problem W jaki sposób dostanę się z której strony pochodzi użytkownik, ponieważ kiedy użytkownik kliknie na link, wyświetlam mu login.xhtml –

+0

Do tego można przekazać parametr z prośbą o identyfikację, z której strony została złożona prośba i na tej podstawie można przekierować na tę samą stronę lub do innej. Sprawdź zaktualizowaną odpowiedź. –

+0

Czy to możliwe, że dasz mi kod demo do tego .. tak samo zrobiłem, ale mówi mi, że jestem na stronie login.xhtml –