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

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

大家讲道理
大家讲道理

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

membalas semua(1)
小葫芦

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan