package org.cs.mgr.util;

import org.apache.log4j.Logger;
import org.cs.constants.Constants;
import org.cs.util.StringUtil;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 
 * @ClassName: SessionInterceptor
 * @Description: TODO
 * @author: cosco gt.fan@msn.cn
 * @date: 2016年10月3日 上午12:28:30
 */
public class SessionInterceptor extends HandlerInterceptorAdapter {
	private String[] excludes;// 不使用过滤器的部分，可以不登录使用的内容，需要在spring-mvc中进行配置
	private Logger log = Logger.getLogger(SessionInterceptor.class);

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String contextPath = request.getContextPath();
		String url = request.getRequestURI();
		log.info("SessionInterceptor url:"+url);
		String referer = request.getHeader("Referer");// 获取地址来源，如果是在地址栏直接输入，那么这个值就为空，否则是从连接过来
		// 如果在地址栏直接输入login.cs，那么要进行跳转
		if (StringUtil.isBlank(referer) && url.indexOf("login.cs") != -1 ) {
			response.sendRedirect(contextPath);
			return false;
		}
		//详情页分享
		if (url.contains("/web/mgmProduct/detailfx") ) {
			return true;
		}
		//分享
		if (url.contains("/version/getAndroidUrl") ) {
			return true;
		}

		if(url.indexOf("oauth2me.cs") != -1 || url.indexOf("oauth2wx.cs") != -1){
			return true;
		}

		HttpSession session = request.getSession();

		if(url.contains("/web/")){
			if(url.indexOf("newsdetil.cs") != -1 || url.indexOf("ajaxLogin.cs") != -1 || url.indexOf("register.cs") != -1  || url.indexOf("forgetPWD.cs") != -1){
				return true;
			} 
			Object mgmUser = session.getAttribute(Constants.SESSION_WEB_USER);
			if (mgmUser == null) {// 未登录，或者登录超时
				for (String exclude : excludes) {
					if (url.startsWith(contextPath + exclude)) { // 不过滤内容
						return true;
					} else {
						continue;
					}
				} // 需要登陆的跳转
				response.sendRedirect("http://yx.dong-xu.com/app/login/login.jsp");
				return false;
			}
			return true;
		}
		
		Object objUser = session.getAttribute(Constants.SESSION_USER);
		if (objUser == null) {// 未登录，或者登录超时
			for (String exclude : excludes) {
				if (url.startsWith(contextPath + exclude)) { // 不过滤内容
					return true;
				} else {
					continue;
				}
			} // 需要登陆的跳转
			response.sendRedirect("http://yx.dong-xu.com/login.jsp");
			return false;
		}
		
		log.info(url);
		return super.preHandle(request, response, handler);
	}

	public void setExcludes(String[] excludes) {
		this.excludes = excludes;
	}
}
