在提出这些问题之前,我已经仔细评估了解决以下问题的可行性。
我有一封来自电子邮件viewRequest.xhtml?requestID=6
的外部链接。我使用过滤器来拦截传入的请求,如果用户未经过身份验证,则会转发到login.xhtml
页面。用户通过身份验证后,请求由FacesContext.getCurrentInstane().getExternalContext().redirect(redirected-url)
转发,然后成功显示该页面。
现在,如果尝试从同一页面注销,即viewRequest.xhtml
页面,请求的URI再次为viewRequest.xhtml
,这会将我带到同一页面而不是注销并将我重定向到登录页面。< / p>
我真正担心为什么过滤器中的request.getRequestedURI
仍然是viewRequest.xhtml
而不是login.xhtml
参考代码
AuthenticationFilter - 用户未经过身份验证 - 在会话中添加请求的电子邮件链接
String from = req.getRequestURI();
if (req.getQueryString() != null) from += "?" + req.getQueryString();
req.getSession().setAttribute("from", from);
res.sendRedirect(req.getContextPath() + "/faces/pages/login.xhtml");
用户登录后
if (from != null && !from.isEmpty()) {
externalContext.getSessionMap().remove("from");
externalContext.redirect(from); *-----------Original URL re-direction---------*
return null;
}
else{
result = "adminHome";
}
现在我们在viewRequest.xhtml页面中成功加载 - 现在点击退出
String from = req.getRequestURI(); <!--FILTER-->
requestedURI
的值仍为viewRequest.xhtml
logout()
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return login;
请帮忙。非常感谢你。