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à from
là null
)
Đ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
@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. –