我正在尝试使用HttpServletRequest.login
方法登录用户。我已经设置了我的web.xml
,创建了login.xhtml
,并将登录按钮的动作映射到我的后台bean方法performLogin
问题是要从用户被重定向的位置获取URL。Ie。他试图去index.xhtml
,但没有会话,所以被重定向到login.xhtml
。我想首先获得他请求的url,所以我尝试从balusC描述的请求映射中读取RequestDispatcher.FORWARD_REQUEST_URI
: JSF 2.0:如何在使用HttpServletRequest后重定向到受保护的页面。登录
这在使用websphere时不起作用,我猜是因为它不转发,而是将用户重定向到登录页面。但是,由于Websphere本身能够在http-form中使用内置的j_security_check
操作时执行正确的转发,因此这一定是可以实现的!
我的问题基本上是;在websphere上运行时,我如何获得这个uri,以便在成功登录时将用户转发到正确的页面?
要获得您在websphere上被重定向的url,您可以读取名为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;
}