2013-03-06 41 views
6

Tôi đang sử dụng OpenId4Java với ứng dụng JSF tôi đã thêm vào chế bảo mật trong một cái gì đó web.xml của tôi như thế này ..OpenId + JSF chuyển hướng người dùng đến trang anh ta đăng nhập?

<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> 

Bây giờ khi ứng dụng bắt đầu và người dùng muốn truy cập vào

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

với sự trợ giúp của web.xml tôi có thể hiển thị cho người dùng trang đăng nhập ngay tại đây tôi đăng nhập bằng openid như Google, Ya hoo bây giờ câu hỏi của tôi là làm thế nào tôi có thể nói openid rằng trở lại của tôi url

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

Hoặc nếu người dùng đến từ

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

này url sau đó sau khi người dùng đăng nhập thành công sẽ đi pa này ge.

+0

Bạn có thể tìm mã từ này [link] (http://crisdev.wordpress.com/2011/03/23/openid4java-login-example/) hữu ích. – rrufai

+0

Cảm ơn nhưng tôi không hiểu làm thế nào nó sẽ tạo ra trở lại url như của bây giờ tôi đang hiển thị trang đăng nhập cho everylink –

+0

ahm bạn có sử dụng bộ lọc web? – Farnsbert

Trả lời

0

Để nhận url gốc mà người dùng đã cố truy cập, vui lòng thử sử dụng biến số RequestDispatcher.FORWARD_REQUEST_URI.

Biến này sẽ chỉ khả dụng nếu bạn được chuyển hướng đến trang đăng nhập từ một số trang bị hạn chế khác. Và vì vậy, hãy nhớ có một số url mặc định, trong trường hợp người dùng trực tiếp truy cập vào trang đăng nhập.

Như rrufai đã chỉ ra, khi url gốc mà người dùng yêu cầu có sẵn, bạn có thể làm theo các bước được đề cập trong this article để chuyển hướng đến url đó, khi xác thực hoàn tất.

+0

Nhưng tôi đang sử dụng web.xml thẻ bối cảnh bảo mật và trong mỗi trang nếu người dùng không đăng nhập i web.xml hiển thị trang login.xhtml –

+0

Vì bạn đang sử dụng JSF, bạn có thể thử sử dụng [RequestDispatcher.FORWARD_REQUEST_URI] (http://docs.oracle.com/) javaee/6/api/javax/servlet/RequestDispatcher.html # FORWARD_REQUEST_URI), khi trang đăng nhập được mở bởi phía máy chủ chuyển tiếp? Biến này sẽ chỉ khả dụng nếu bạn được chuyển hướng đến trang đăng nhập từ một số trang bị hạn chế khác. Và vì vậy, hãy nhớ có một số url mặc định, trong trường hợp người dùng trực tiếp truy cập vào trang đăng nhập. –

+0

Vẫn cho tôi địa chỉ của trang logix.xhtml –

0

Sử dụng chuyển hướng để điều khiển chuyển tiếp trên trang tiếp theo.

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

Có xem xét này:

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

Cập nhật:

Để xác định rằng từ trang nào yêu cầu được đưa ra xin vui lòng tham khảo các bài viết:

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

thats the issue Làm thế nào tôi sẽ nhận được từ người dùng trang nào vì khi nào người dùng nhấp vào liên kết tôi đang hiển thị cho anh ta một login.xhtml –

+0

Để bạn có thể chuyển một tham số với yêu cầu xác định rằng từ đó yêu cầu trang được thực hiện và dựa trên đó bạn có thể chuyển hướng đến cùng một trang hoặc đến một trang khác. Vui lòng kiểm tra câu trả lời được cập nhật. –

+0

Bạn có thể cho tôi bất kỳ mã trình diễn nào cho điều này..và tôi đã làm như vậy nhưng nó nói với tôi rằng tôi đang ở trang login.xhtml –

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