1,使用环境:spring mvc、spring security3.2、hibernate、extjs4.2.3

2、extjs 初始化加载代码中加出如下代码:

Ext.onReady(function() {

    Ext.Ajax.on('requestcomplete', function(a, b, c) {
        if (b.responseText.charAt(0) == "{") {
            var e = b.responseText;
            if (Ext.decode(e).fileName) {
                return
            }
        };
        var d = b.getResponseHeader("sessionstatus");
        if (d == 'timeout') {
            Ext.Msg.alert('提示', '会话超时,请重新登录!', function(e, f) {
                if (e === 'ok') {

                    //替换当前页面

                    window.location.replace('login')
                }
            })
        }
    });

}

3、在Filter 实现类中重载doFilter方法,加入如下的代码:

@Override
public void doFilter ( ServletRequest request, ServletResponse response,
                        FilterChain chain ) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;  
        HttpServletResponse res = (HttpServletResponse) response;
        //res.addHeader("X-Frame-Options", "SAMEORIGIN");
        //res.setHeader("X-Frame-Options", "DENY");
        // 判断session里是否有用户信息  
                    //System.out.println(req.getSession().getAttribute("SPRING_SECURITY_CONTEXT").toString());
        if (req.getSession().getAttribute("SPRING_SECURITY_CONTEXT") == null){  
            // 如果是ajax请求响应头会有,x-requested-with
            if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
                //System.out.println("req.getSession().getAttribute('SPRING_SECURITY_SAVED_REQUEST_KEY')"+req.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST") );
                req.getSession().removeAttribute("SPRING_SECURITY_SAVED_REQUEST");  
                res.setHeader("sessionstatus", "timeout");
            }
        }

}


注意:本文归作者所有,未经作者允许,不得转载