Rumah > Soal Jawab > teks badan
拦截器代码(想实现的功能就是如果当前 Session 中有 user,那么就可以访问页面和使用 AJAX 请求):
public class UserLoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("user") != null) {
return true;
}
request.getRequestDispatcher("/WEB-INF/views/page/user/login.jsp").forward(request, response);
return false;
}
}
该拦截器拦截了所有的方法(/**
),对于返回 ModelAndView
的控制器方法对应的路径,拦截器可以正常获得 session 的值;但是对于 AJAX 访问的控制器方法(被 @ResponseBody
注解的方法)对应的路径,拦截器却无法获得 session 的值。请问这是什么原因呢,解决办法是什么?
高洛峰2017-04-18 10:50:55
Apabila
SpringMVC
memintas ajax
permintaan, response.sendRedirect
tidak boleh melompat seperti biasa. Anda boleh menentukan sama ada ia adalah permintaan ajax
Jika ya, kembalikan mesej ke meja depan dan meja depan akan melompat ke halaman log masuk selepas menerimanya.
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("user") != null) {
return true;
}
// 如果是ajax请求,请求头会有x-requested-with
String requestWith = request.getHeader("x-requested-with");
if (requestWith != null && requestWith.equalsIgnoreCase("XMLHttpRequest")){
ServletOutputStreamout = rep.getOutputStream();
out.print("unlogin");//返回给前端页面的未登陆标识
out.flush();
out.close();
} else {
response.sendRedirect("/WEB-INF/views/page/user/login.jsp");
}
return false;
}