java - AJAX 请求时,SpringMVC 拦截器无法获得 session 中的值
大家讲道理
大家讲道理 2017-04-18 10:48:55
0
1
756

拦截器代码(想实现的功能就是如果当前 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 的值。请问这是什么原因呢,解决办法是什么?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

reply all (1)
小葫芦

SpringMVC拦截ajax请求时,response.sendRedirect不能正常跳转。你可以判断是否为ajaxRequest, if yes, return a message to the front desk, and the front desk will jump to the login page after receiving it.

@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; }
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!