Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
571 views
Welcome To Ask or Share your Answers For Others

1 Answer

问题已经解决。今天在网上闲逛的时候,偶然看到与此相关的博客。原来是因为前端使用的 AJAX 框架是 fetch,而 fetch 发送 AJAX 请求默认是不带 Cookie 的 —— 所以默认情况下 fetch 的 AJAX 请求不会将 JSESSIONID 传递到后端,自然此时对于该请求,后端也就判断这是一个新的 Session 了,所以无法获得 session 的值。解决的办法就是修改 fetch 的默认设置,让其在发送 AJAX 请求的时候,能够带上 Cookie。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...