response重定向后,为何页面需要刷新后才会跳转?

现在在做一个web应用系统,前端框架是Extjs5.1,后端框架是spring+springMVC+hibernate。

加了一个登录过滤器,当session失效后,再点击页面中的任意功能菜单就要跳转到登录页面,
我在验证session为空后,用response.sendRedirect()重定向到登录页面,

但是现在的问题是:

session失效后,我点击任意功能菜单不会显示数据,页面不跳转,地址栏网址也不会变,必须要按F5刷新后才会跳转到登录页面,在fireBug里面重定向会显示。

登录过滤器:


public class LoginFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        String contextPath = request.getContextPath();
        String url = request.getRequestURI();
        url = url.replace(contextPath, "");

        if ((url.startsWith("/sys") || url.startsWith("/bus")) && 
                !url.contains("/sys/sysuser/login") )) {
            SysUser sysUser = (SysUser) request.getSession().getAttribute(Constant.SESSION_SYS_USER);

            if (null == sysUser) {
                response.sendRedirect(contextPath + "/login.jsp");
                return;
            }
        }
        if (request.getMethod().equalsIgnoreCase("get")) {
            request = new GetHttpServletRequestWrapper(request, "UTF-8");
        }
        filterChain.doFilter(request, response);


    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }

}

fireBug截图:
fireBug截图

ajax请求浏览器不理会服务器端302响应头,需要自己判断内容后用js跳转

参考:easyui请求页面拦截跳转超时提示

如果是用的ajax请求url,redirect是不会自动跳转的,必须通过location.href="xxx.jsp"来实现、

if (null == sysUser) {
response.sendRedirect(contextPath + "/login.jsp");
return;
}

这些有问题。 return ?当然不会往下执行。你 用户为空的时候只是把地址改变,但没有执行下一步操作啊。把return这行删除就OK了。

图片说明我做过一个短信验证码的可以实现效果后面那个return不需要。而且我用的是ajax发送请求。