如何在websphere上进行基本身份验证后重定向到请求的页面

时间:2013-01-15 13:56:30

标签: jsf redirect jsf-2 websphere basic-authentication

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

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

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

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

1 个答案:

答案 0 :(得分:2)

要获取从websphere重定向的网址,您可以阅读名为WASReqURL的Cookie。你在这里获得的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;
}