Javascript 如何将用户从servlet重定向到登录页面?
如果在页面加载时没有在会话中找到登录详细信息,我尝试将用户从页面a重定向到网站的登录页面。我正在使用servlet来实现同样的功能 从A页开始,我在页面加载时对我的servlet进行最基本的AJAX调用,如下所示: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
$.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()代码>