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");
}
}
}
注意:本文归作者所有,未经作者允许,不得转载