我正在尝试使用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以便将用户转发到正确的页面?
答案 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;
}