package com.sp2p.system.interceptor;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.hehenian.web.common.contant.WebConstants;
import com.shove.security.Encrypt;
import com.shove.util.CookieUtils;
import com.shove.util.UtilDate;
import com.shove.web.util.DesSecurityUtil;
import com.shove.web.util.ServletUtils;
import com.sp2p.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.shove.Convert;
import com.sp2p.constants.IConstants;
/**
* 网站是否已经关闭判断拦截
*
* @author 钟垂青
* @Create Jun 3, 2011
*
*/
public class CloseNetWorkInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;
public static Log log = LogFactory.getLog(CloseNetWorkInterceptor.class);
private HttpSession session;
private HttpServletResponse response;
private HttpServletRequest request;
private UserService userService;
public void destroy() {
}
public void init() {
}
@SuppressWarnings("unchecked")
public String isCloseNetWork(ActionInvocation invocation) throws Exception {
ServletContext application = request.getSession().getServletContext();
Map<String, String> map = (Map<String, String>) application.getAttribute(IConstants.Session_CLOSENETWORK);
Integer status = Convert.strToInt(map.get("status"), -1);
if (status == 2) {
session.setAttribute("netWork", map.get("content"));
return IConstants.Session_CLOSENETWORK;
}
return invocation.invoke();
}
public String intercept(ActionInvocation invocation) throws Exception {
request = ServletActionContext.getRequest();
response = ServletActionContext.getResponse();
session = request.getSession();
String retUrl = request.getHeader("Referer");
log.info("-------------------" + retUrl);
log.info(request.getRequestURL());
// 判断请求是否带参数
String params = request.getQueryString();
if (null != params) {
isScript(params);
}
if (isAjaxRequest()) {
return ajaxIntercept(invocation);
}
String hostName = "http://"+request.getServerName();
if(hostName.startsWith("http://hehenian.com")) {
String queryString = (request.getQueryString() == null ? "" : "?"+request.getQueryString());
response.setStatus(301);
String requestUrl = request.getRequestURL().toString();
requestUrl = requestUrl.replace("http://hehenian.com", "http://www.hehenian.com");
response.setHeader( "Location", requestUrl + queryString);
response.setHeader( "Connection", "close" );
}
//通过cookie登录
/*String token = (String)CookieUtils.getKey(request,"token");
if (request.getSession().getAttribute("user")==null&&StringUtils.isNotBlank(token)){
DesSecurityUtil des = new DesSecurityUtil();
String key1 = des.decrypt(token);
if (StringUtils.isNotBlank(key1)){
String[] ss = key1.split("-");
if (ss.length==3){
Map<String, String> map = userService.queryUserById(Integer.parseInt(ss[0]));
DateFormat dateformat = new SimpleDateFormat(UtilDate.simple);
String lastTime = dateformat.format(new Date());
User user = userService.userLogin2(map.get("username"), map.get("password"), ServletUtils.getRemortIp(), lastTime);
session.setAttribute("user", user);
session.setAttribute("platform",ss[1]);
session.setAttribute("sourcefrom",ss[2]);
}
}
}*/
//设置用户来源
String sourcefrom = request.getParameter("_sourcefrom_");
if (StringUtils.isNotBlank(sourcefrom)){
session.setAttribute("sourcefrom",sourcefrom);
}
if (WebConstants.COLOUR_LIFE_Flag_WYF.equals(session.getAttribute("colourlifeFlag"))){
//是彩富人生的用户
String uri = request.getRequestURI();
for (String eFilterUrl : eFilterUrls) {
if (StringUtils.contains(uri,eFilterUrl)){
//在受限制的url中
return "e-webapp-msg";
}
}
}
return isCloseNetWork(invocation);
}
private static String[] eFilterUrls ;
static {
String xx = "webapp-money.do,investBorrow.do,webapp-tz-intro.do,webapp-tz-intro.do";
eFilterUrls = xx.split(",");
}
public void isScript(String params) throws UnsupportedEncodingException {
//获取请求中的参数
params = URLDecoder.decode(params, "utf-8");
boolean b = (params.contains("script") || params.contains("<script>") || params.contains("</script>") || params.contains(
"alert"));
if (b) {
try {
// request.getRequestDispatcher("index.jsp").forward(request,response);
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":"
+ request.getServerPort() + path + "/";
// //重定向到错误页面
// request.getRequestDispatcher("/error/404.jsp").forward(request,
// response);
// response.sendRedirect(basePath);
request.getRequestDispatcher("/error/404.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// ajax请求拦截 没登录返回 NoLogin 登录流程继续
@SuppressWarnings("unchecked")
private String ajaxIntercept(ActionInvocation invocation) throws Exception {
log.info("ajax拦截");
ServletContext application = request.getSession().getServletContext();
Map<String, String> map = (Map<String, String>) application.getAttribute(IConstants.Session_CLOSENETWORK);
Integer status = Convert.strToInt(map.get("status"), -1);
if (status == 2) {
session.setAttribute("netWork", map.get("content"));
response.setContentType("text/html");
response.getWriter().print(IConstants.Session_CLOSENETWORK);
log.info("No Login");
return null;
}
return invocation.invoke();
}
private boolean isAjaxRequest() {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header)) {
return true;
}
return false;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}