Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session JSF AJAX和普通重定向到登录并返回上一页_Session_Jsf 2 - Fatal编程技术网

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());
Class
FacesAjaxAwareUserFilter

   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()
function
onLoad
然后将值设置为。因此,重定向 值在整个浏览器中都可用。你可以用在任何场合 你需要的页面。!!您需要做的就是签入这个变量
localStorage.redirectURI

response.sendRedirect("/sessionexpired"+"?redirectUrlPattern="+request.getRequestURI());

也许你的BaluC有拼写错误,应该是BaluC。您可以再创建一个筛选器,以防止出现会话过期的情况。我想,防止会话过期不是一个好方法。。!!在我的问题中,处理会话超时已完成。重定向现在是问题所在。!!