8

我在我的 JSF 应用程序中使用 PrettyFaces。该站点需要身份验证才能访问某些页面,因此我使用了一个侦听器(预渲染视图)来检查用户是否已登录。因此,如果用户尝试访问 /foo(PrettyFaces 之前的 /foo.jsf),我会重定向登录。

但是,我想将它们重定向到它们的初始目的地,所以我想附加一个请求参数“next”,以便我将用户重定向到 /login?next=/foo。不幸的是,我无法从请求对象中获取原始 requestURI,以下代码中的 uri 字符串是 /appname/foo.jsf 而不是 /appname/foo

ctx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) ctx.getRequest();
String uri = request.getRequestURI();

有没有办法检索原始 URI 路径?

4

2 回答 2

7

PrettyFaces 在幕后使用将RequestDispatcher#forward()漂亮的 URL 转发到真实的 URL。使用这种技术,原始请求 URI 可用作带有 key 的请求属性RequestDispatcher#FORWARD_REQUEST_URI

所以,这应该这样做:

String originalURI = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
// ...
于 2011-10-12T13:03:54.113 回答
4

使用此代码获取原始请求 URL:

PrettyContext.getCurrentInstance().getRequestUrl().toURL()

于 2013-11-14T13:00:14.600 回答