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

时间:2017-07-31 05:55:55

标签: javascript java jquery ajax servlets

如果在页面加载时没有在会话中找到登录详细信息,我正尝试将用户重定向到第A页的网站登录页面。我正在使用servlet。

从第A页开始,我在页面加载时将最基本的AJAX调用发送到我的servlet,如下所示:

$.ajax({
    url: "/bin/website/protectedpage.html",
    success: function(){
    }
});

但是,我只能通过上述方法获得以下结果:

1

response.sendRedirect("/content/website/en/login.html");

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

2

ServletContext context= getServletContext();
            RequestDispatcher rd= context.getRequestDispatcher("content/website/en/login.html");
            rd.forward(request, response);

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

我错过了什么?请帮我一样。提前谢谢。

3 个答案:

答案 0 :(得分:2)

$.ajax()对服务器执行异步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:从here复制的代码块。

答案 1 :(得分:0)

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

如果ypu更喜欢,您可以使用window.location.href = "url"。这类似于点击链接。

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

答案 2 :(得分:0)

你会尝试过像

这样的东西吗?
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...
        }
    });