java拦截器跳转页面跳转页面跳转_解决ajax 不处理 SpringMVC 拦截器 页面跳转问题...

问题分析:一开始,用拦截器做登录拦截,需求是博客系统,没有登录则没办法评论,但是可以进去观看博客。

测试:发现调试有响应,但是不跳转,查询发现是拦截器没有权限处理ajax

560b70e4c4cb

image.png

解决方案:手动指定判断是否为ajax,再做处理

后端拦截器核心代码:

560b70e4c4cb

image.png

public class LoginInterceptor implements HandlerInterceptor {

/**

* 在请求处理之前进行调用(Controller方法调用之前)

*/

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

try {

//统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session)

User user = (User) request.getSession ( ).getAttribute ("user");

if (user != null && !"".equals (user)) {

return true;

}

//如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求,需要特殊处理 否则直接重定向就可以了

if ("XMLHttpRequest".equals (request.getHeader ("X-Requested-With"))) {

//告诉ajax我是重定向

response.setHeader ("REDIRECT", "REDIRECT");

//告诉ajax我重定向的路径

response.setHeader ("CONTENTPATH", "/login");

response.setStatus (HttpServletResponse.SC_FORBIDDEN);

} else {

// 如果不是ajax请求,直接跳转

// response.sendRedirect(request.getContextPath()+"你的登陆页地址");

response.sendRedirect (request.getContextPath ( ) + "/login");

}

} catch (Exception e) {

e.printStackTrace ( );

}

return false;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作

//如果设置为true时,请求将会继续执行后面的操作

}

}

前端代码:

560b70e4c4cb

image.png

$.ajax({

url: 'saveComment',

data: {bid, testa},

type:'post',

jsonType:'json',

success: function (data) {

var result = data.result;

if (result == 'SUCCESS') {

alert('评论成功');

// 刷新

window.location.reload();

}

},

complete : function(xhr, status) {

//拦截器拦截没有权限跳转

// 通过xhr取得响应头

var REDIRECT = xhr.getResponseHeader("REDIRECT");

//如果响应头中包含 REDIRECT 则说明是拦截器返回的

if (REDIRECT == "REDIRECT")

{

document.location.href = xhr.getResponseHeader("CONTEXTPATH");

}

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值