2012-01-06 30 views
6

Trước khi người dùng đăng nhập, nếu nhập xxx.detail.jsf, nó sẽ chuyển hướng đến trang đăng nhập để cho phép người dùng đăng nhập. Nhiệm vụ này đã được thực hiện rồi. Làm thế nào tôi có thể làm cho nó chuyển hướng trở lại xxx.detail.jsf sau khi người dùng đăng nhập thành công?Làm cách nào để chuyển hướng trở lại trang truy cập mong muốn của người dùng sau khi người dùng đăng nhập?

Tôi đang sử dụng Eclipse Indigo, Tomcat 7 và Mojarra 2.0.3.

+0

Điều bạn ngụ ý chắc chắn là không rõ ràng. Ý bạn là "* nếu gõ' xxx.detail.jsf', nó sẽ chuyển hướng đến trang đăng nhập * "? – Lion

+0

@Lion nếu người dùng cố gắng truy cập một số trang (ví dụ: detail.jsf) trước khi đăng nhập, hệ thống sẽ chuyển hướng người dùng đến trang đăng nhập và chuyển hướng quay lại trang (ví dụ: detail.jsf) mà người dùng muốn truy cập sau khi người dùng đăng nhập thành công vào hệ thống. –

Trả lời

10

Tại thời điểm khi bạn đang chuyển hướng đến trang đăng nhập, bạn cần lưu URI yêu cầu hiện tại. Bạn có thể đang sử dụng một số Filter để thực hiện kiểm tra đăng nhập và chuyển hướng. Trong trường hợp đó, bạn có thể sử dụng HttpServletRequest#getRequestURI() để có được những yêu cầu URI hiện tại:

String requestURI = request.getRequestURI(); 

Bạn có thể có thể vượt qua nó như một tham số yêu cầu trong URL chuyển hướng hoặc lưu trữ nó trong phiên. Việc gửi thông số yêu cầu là an toàn nhất:

response.sendRedirect(request.getContextPath() + "/login.jsf?from=" + URLEncoder.encode(requestURI, "UTF-8")); 

Trong bean được liên kết với trang đăng nhập, bạn có thể đặt tham số này là thuộc tính được quản lý hoặc thông số chế độ xem. Giả sử rằng bean được xem scoped để bạn có thể thực hiện các hành động/xác thực hợp lệ và thích hợp. Trong trường hợp đó, các thông số xem là cách gọn gàng chỉ:

<f:metadata> 
    <f:viewParam name="from" value="#{login.from}" /> 
</f:metadata> 

Sau đó, khi đăng nhập thực thành công, bạn có thể chuyển hướng đến rằng URI bởi ExternalContext#redirect():

public void login() throws IOException { 
    // ... 

    FacesContext.getCurrentInstance().getExternalContext().redirect(from); 
} 

(nếu cần cung cấp một mục tiêu mặc định cho trường hợp là fromnull)

+0

bạn có thể vui lòng hướng dẫn tôi cách thêm câu trả lời vào mã của tôi không. 'externalContext.redirect (từ);' Tôi gặp lỗi trên dòng này –

+0

Nó có sẵn theo 'FacesContext' theo cách thông thường. Tôi đã chỉnh sửa câu trả lời của mình. – BalusC

+0

cảm ơn câu trả lời của bạn, nó giúp tôi rất nhiều. Bạn có thể chỉ cho tôi nếu tôi muốn đếm ngược 3 giây sau đó chỉ bắt đầu chuyển hướng trở lại trang, cách thực hiện việc này? –

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