`
wenjinglian
  • 浏览: 806093 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

session失效通过头信息判断跳转

阅读更多
/**
 * 拦截用户是否登录跳转到登录页
 * 页面请求和ajax异步请求都能跳转
 */
@Component
public class SessionInterceptor extends AbstractInterceptor {

    private static String APPLICATION_JSON = "application/json";

    private static String SESSION_DESTROYED = "{\"destroyed\":true}";

    private static final Log logger = LogFactory.getLog(SessionInterceptor.class);

    private static final long serialVersionUID = -6541521429930621158L;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        User user = (User) ActionContext.getContext().getSession().get(SessionConstants.SESSION_USER_KEY);
        if ((null == user)) {
            logger.info("session is invalid");
            if (isJsonRequest()) {
                try {
//异步请求返回过session过期标识,ajax通用方法中统一跳转                    ServletActionContext.getResponse().getOutputStream().write(SESSION_DESTROYED.getBytes("utf-8"));
                } catch (Exception e) {
                    logger.error("ajax output exception", e);
                }
                return null;
            }
            //同步请求跳转
            return "login";
        } else {
            return invocation.invoke();
        }
    }

/**
* 通过头信息判断是否为ajax json异步请求
*/
    private boolean isJsonRequest() {
        HttpServletRequest request = ServletActionContext.getRequest();
        String accept = request.getHeader("accept");
        if(logger.isInfoEnabled()){
            logger.info("accept:" + accept);
        }
        if (StringUtils.contains(accept, APPLICATION_JSON)) {
            return true;
        }
        return false;
    }
}

 

 $.ajax( {             
		        url : url+'?randomCode='+(Math.random()),
		        data : param,
		        cache : cacheType,
		        type : postType,
		        dataType : dataType,
		        processData : processData ,
		        async : async,
		        timeout : timeout,
		        success : function(data){
                                //session销毁,跳转
		    		if(data.destroyed){
		    			utils.locationHref(sys.sysdomain + "/login.html");
		    		}else{
		    			if(successCB){
			    			successCB(data);
			    		}
		    		}
		    		
		    	},
		        error : function(errorObj){
		    		if(errorCB){
		    			errorCB(errorObj);
		    		}else{
		    			alert("请求数据失败,请稍候再试。("+errorObj['statusText']+")");
		    		}
		    	},
		    	beforeSend : function(jqXHR, settings){

		    	}
		    });

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics