1

我正在尝试使用该HttpServletRequest.login方法登录用户。我已经设置了我的web.xml,创建了一个login.xhtml,并将登录按钮的操作映射到我的支持 bean 方法,称为performLogin

问题是从用户被重定向的地方获取 URL。IE。他试图去index.xhtml,但没有会话,所以被重定向到login.xhtml。我想首先获取他请求的 url,所以我尝试RequestDispatcher.FORWARD_REQUEST_URI从请求映射中读取,如 balusC 所述:JSF 2.0 : How to redirect to the protected page after using HttpServletRequest.login

这在使用 websphere 时不起作用,我猜是因为它不转发,而是将用户重定向到登录页面。但是,由于 Websphere 本身能够在使用 http-form 中的内置j_security_check操作时进行正确的转发,所以这一定是可以完成的!

所以,我的问题基本上是;在 websphere 上运行时,如何获取此 uri 以便在成功登录时将用户转发到正确的页面?

4

1 回答 1

2

要获取您在 websphere 上被重定向的 url,您可以读取名为WASReqURL. 你在这里得到的 uri 包括主机名、端口和上下文路径,所以我在我的方法中删除了这些:

private String getRedirectUrl() {
    Map<String, Object> cookies = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();

    if (cookies.containsKey(WAS_REDIRECT_COOKIE_NAME)) {
        Cookie cookie = (Cookie) cookies.get(WAS_REDIRECT_COOKIE_NAME);

        String url = cookie.getValue();

        String context = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();

        if (url != null && url.contains(context)) {
            url = url.substring(url.indexOf(context) + context.length() + 1);
        }

        return url;
    }
    return null;
}
于 2013-01-16T08:59:19.080 回答