Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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
Javascript 如何将用户从servlet重定向到登录页面?_Javascript_Java_Jquery_Ajax_Servlets - Fatal编程技术网

Javascript 如何将用户从servlet重定向到登录页面?

Javascript 如何将用户从servlet重定向到登录页面?,javascript,java,jquery,ajax,servlets,Javascript,Java,Jquery,Ajax,Servlets,如果在页面加载时没有在会话中找到登录详细信息,我尝试将用户从页面a重定向到网站的登录页面。我正在使用servlet来实现同样的功能 从A页开始,我在页面加载时对我的servlet进行最基本的AJAX调用,如下所示: $.ajax({ url: "/bin/website/protectedpage.html", success: function(){ } }); 然而,通过上述方法,我只能取得以下结果: 一, response.sendRedirect(“/conte

如果在页面加载时没有在会话中找到登录详细信息,我尝试将用户从页面a重定向到网站的登录页面。我正在使用servlet来实现同样的功能

从A页开始,我在页面加载时对我的servlet进行最基本的AJAX调用,如下所示:

$.ajax({
    url: "/bin/website/protectedpage.html",
    success: function(){
    }
});
然而,通过上述方法,我只能取得以下结果:

一,

response.sendRedirect(“/content/website/en/login.html”)

导致HTTP代码302响应,但实际上没有发生重定向。此外,响应主体中没有返回任何内容

二,

导致响应代码200在响应正文中返回整个登录页面HTML,但仍然不将用户重定向到登录页面


我错过了什么?请帮我做同样的事情。提前感谢。

您可以使用
window.location.replace(“url”)
(模拟HTTP重定向)

如果ypu愿意,您可以使用
window.location.href=“url”
。这类似于单击链接


函数replace()不会在会话历史记录中保留原始页面,因此用户不会陷入永无止境的后退按钮。对我来说,replace()是最好的选择。

您可以使用
window.location.replace(“url”)
(模拟HTTP重定向)

如果ypu愿意,您可以使用
window.location.href=“url”
。这类似于单击链接

函数replace()不会在会话历史记录中保留原始页面,因此用户不会陷入永无止境的后退按钮。对我来说,replace()是最佳选择。

对服务器执行异步HTTP调用。仅从服务器重定向呼叫也不会在浏览器上重定向。在前端本身的ajax调用之后,您必须处理重定向

你可以试试这样的

$.ajax({
    type: "POST",
    url: URL,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // Redirect here
            window.location.href = data.redirect;
        }
        else {
            // No redirection.
        }
    }
});
PS:从复制的代码块。

对服务器执行异步HTTP调用。仅从服务器重定向呼叫也不会在浏览器上重定向。在前端本身的ajax调用之后,您必须处理重定向

你可以试试这样的

$.ajax({
    type: "POST",
    url: URL,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // Redirect here
            window.location.href = data.redirect;
        }
        else {
            // No redirection.
        }
    }
});

PS:从复制的代码块。

您会尝试类似的方法吗

function_name(funct) { return function(data) { if($("#myForm", data).size() > 0) top.location.href="login"; else funct(data); } }
比如说

function sample(data, funct){
    if($("#myForm", data).length > 0)
        top.location.href="login.htm";//redirection
    else
        funct(data);
}
然后,在进行Ajax调用时,我们使用了如下内容:

$.post("myAjaxHandler", 
       {
        param1: sam,
        param2: kari
       },
       function(data){
           sample(data, myActualCB);
       }, 
       "html"
);
所有Ajax调用总是在DIV元素中返回HTML,我们用它来替换页面的一部分。此外,我们只需要重定向到登录页面。 我们基本上有一个ISA服务器,它侦听所有请求,并用302和登录页面的位置头进行响应。 现在检查状态302,正如您在上面提到的,您将得到响应302

 $(document).ajaxComplete(function(e, xhr, settings){
        if(xhr.status === 302){
           var loginPageRedirectHeader = xhr.getResponseHeader("LoginPage");
    if(loginPageRedirectHeader && loginPageRedirectHeader !== ""){
    window.location.replace(loginPageRedirectHeader); //check for location header and redirect...
        }
    });

你会尝试类似的东西吗

function_name(funct) { return function(data) { if($("#myForm", data).size() > 0) top.location.href="login"; else funct(data); } }
比如说

function sample(data, funct){
    if($("#myForm", data).length > 0)
        top.location.href="login.htm";//redirection
    else
        funct(data);
}
然后,在进行Ajax调用时,我们使用了如下内容:

$.post("myAjaxHandler", 
       {
        param1: sam,
        param2: kari
       },
       function(data){
           sample(data, myActualCB);
       }, 
       "html"
);
所有Ajax调用总是在DIV元素中返回HTML,我们用它来替换页面的一部分。此外,我们只需要重定向到登录页面。 我们基本上有一个ISA服务器,它侦听所有请求,并用302和登录页面的位置头进行响应。 现在检查状态302,正如您在上面提到的,您将得到响应302

 $(document).ajaxComplete(function(e, xhr, settings){
        if(xhr.status === 302){
           var loginPageRedirectHeader = xhr.getResponseHeader("LoginPage");
    if(loginPageRedirectHeader && loginPageRedirectHeader !== ""){
    window.location.replace(loginPageRedirectHeader); //check for location header and redirect...
        }
    });

嗨,安东尼奥!你是说基于servlet返回的URL从JS重定向吗?如果是,它是否保持会话数据完整,因为我不想丢失会话中保存的登录信息。另外,我希望直接从servlet重定向,而不是从JS.Hi Antonio!你是说基于servlet返回的URL从JS重定向吗?如果是,它是否保持会话数据完整,因为我不想丢失会话中保存的登录信息。另外,我希望直接从servlet重定向,而不是从JS.Hi Abdullah!这似乎是对的。这里还有两个问题,1。HttpSession值在window.location.href情况下有效吗?2.这是实现公共页面和受保护页面(只有登录用户才能看到的页面)混合系统的正确方法吗?1将是您第一个问题的答案。2.至于第二个问题,只使用普通HTTP调用和ajax调用实现混合系统是可以的,但不是首选。您可以在后端使用一些框架,比如Spring security。我想问的是,如果我使用JavaScript中的window.location.href,HttpSession是否在进一步的请求对象中保持有效?在进行window.location.href调用之前,会话中存储的属性/值是否也可以稍后从会话中检索?仅从Javascript执行
window.location.href
不会对会话对象产生任何影响。您还必须使用类似的方法在服务器端使会话无效
session.invalidate()你好,阿卜杜拉!这似乎是对的。这里还有两个问题,1。HttpSession值在window.location.href情况下有效吗?2.这是实现公共页面和受保护页面(只有登录用户才能看到的页面)混合系统的正确方法吗?1将是您第一个问题的答案。2.至于第二个问题,只使用普通HTTP调用和ajax调用实现混合系统是可以的,但不是首选。您可以在后端使用一些框架,比如Spring security。我想问的是,如果我使用JavaScript中的window.location.href,HttpSession是否在进一步的请求对象中保持有效?在进行window.location.href调用之前,会话中存储的属性/值是否也可以稍后从会话中检索?仅从Javascript执行
window.location.href
不会对会话对象产生任何影响。您还必须使用类似的方法在服务器端使会话无效
session.invalidate()