Session JSF AJAX和普通重定向到登录并返回上一页
当前状态:Session JSF AJAX和普通重定向到登录并返回上一页,session,jsf-2,Session,Jsf 2,当前状态: response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI()); 如果出现任何会话超时,将执行FacesAjaxAwareUserFilter中的redirectToLogin函数。从那里我可以重定向到我需要的任何页面。我在所有情况下都会得到URI。 这一切都很好,非常感谢。:) response.sendRedirect("/sessionexpired"+"?redi
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
如果出现任何会话超时,将执行FacesAjaxAwareUserFilter
中的redirectToLogin
函数。从那里我可以重定向到我需要的任何页面。我在所有情况下都会得到URI。
这一切都很好,非常感谢。:)
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
现在是问题的第二部分
if (request.getRequestedSessionId()!=null && (!SecurityUtils.getSubject().isAuthenticated() || !request.isRequestedSessionIdValid()))
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
重定向到登录并返回上一页
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
例如:
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
第5页-->登录-->第5页
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
我已经将重定向URI附加到登录URI,并从bean中检索了值
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
但问题是,在用户登录之前,我有两个页面。登录模式选择页面(即谷歌认证或默认登录)和读取用户名和密码的页面
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
如何通过这两个页面传递重定向URI
。?
if (request.getRequestedSessionId()!=null && (!SecurityUtils.getSubject().isAuthenticated() || !request.isRequestedSessionIdValid()))
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
这是我用来在Ajax超时和正常会话超时时重定向的代码
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
ClassFacesAjaxAwareUserFilter
if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
res.setContentType("text/xml");
res.setCharacterEncoding("UTF-8");
res.getWriter().printf(FACES_REDIRECT_XML, request.getContextPath() + getLoginUrl()+"?redirectUrlPattern="+request.getRequestURI());
}
else {
if (request.getRequestedSessionId()!=null && (!SecurityUtils.getSubject().isAuthenticated() || !request.isRequestedSessionIdValid())) {
response.sendRedirect(getLoginUrl()+"?redirectUrlPattern="+request.getRequestURI());
return;
}
super.redirectToLogin(req, res);
}
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
使用的方法是Omniface
中的FullAjaxExceptionHandlerFactory
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
我使用了一种将值附加到URI的方法,但它无法识别会话是否已过期或未创建会话(当用户首次登录时)
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
问题代码
if (request.getRequestedSessionId()!=null && (!SecurityUtils.getSubject().isAuthenticated() || !request.isRequestedSessionIdValid()))
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
我正在寻找一种从登录前创建的新会话中识别过期会话的方法
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
我希望以更好的方式实施这一点
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
最受欢迎的方法是不将当前URI附加到重定向URL 我已经找到了一个解决方案,但仍然没有找到最好的解决方案。如果您有任何其他的答案,我们将不胜感激
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
步骤1
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
配置应用程序以检测Ajax超时和正常超时。我就是这样做的
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
步骤2
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
在会话超时时使用以下命令查找URI
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
FacesAjaxAwareUserFilter
将为您获取ServletRequest
和ServletResponse
。
表单,您可以使用此表单将其转换为HttpServletRequest
和HttpServletResponse
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response= (HttpServletResponse) res;
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
request.getRequestURI()
将为您获取重定向URI
String redirectURI=request.getRequestURI();
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
现在,您希望将其保存到某个存储中,以便可以在任何需要的地方使用它。我找到的唯一方法是使用这个URL将其附加到URL
res.getWriter().printf(FACES_REDIRECT_XML, request.getContextPath() + "/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
或
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
现在,在sessionExpiry页面bean的页面加载中,我使用它获取通过URL传递的值
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
redirectUrl=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("redirectUrlPattern");
现在我使用JavaScript将redirectUrl
的值设置为。是将值保存到本地存储的方式
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
这是我的sessionexpiry.xhtml页面
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
<script type="text/javascript">
function setRedirectURIToLocalStorage(){
if(typeof(Storage)!=="undefined")
{
localStorage.redirectURI=document.getElementById("redirectUrl").value;
window.location.href="/login";
}
}
</script>
</h:head>
<h:body id="body" onload="setRedirectURIToLocalStorage()">
<f:view contentType="text/html">
<h:form prependId="false" >
<h:inputHidden id="redirectUrl" value="#{sessionExpBean.redirectUrl}" />
<h:outputText value="Session Expired... Redirecting...!!"></h:outputText>
</h:form>
</f:view>
</h:body>
函数setRedirectURIToLocalStorage(){
if(类型(存储)!=“未定义”)
{
localStorage.redirectURI=document.getElementById(“redirectUrl”).value;
window.location.href=“/login”;
}
}
该页面将调用setRedirectURIToLocalStorage()
functiononLoad
然后将值设置为。因此,重定向
值在整个浏览器中都可用。你可以用在任何场合
你需要的页面。!!您需要做的就是签入这个变量
localStorage.redirectURI
response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());
也许你的BaluC有拼写错误,应该是BaluC。您可以再创建一个筛选器,以防止出现会话过期的情况。我想,防止会话过期不是一个好方法。。!!在我的问题中,处理会话超时已完成。重定向现在是问题所在。!!