package com.sp2p.system.interceptor; import java.io.PrintWriter; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.hehenian.biz.common.account.dataobject.AccountUserDo; import org.apache.commons.lang.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.data.ConnectionManager; import com.sp2p.constants.IConstants; import com.sp2p.entity.User; /** * 用户登录拦截 * * @author 杨程 * @Create Jun 3, 2011 * */ public class FrontUserSeesionInterceptor implements Interceptor { public static Log log = LogFactory .getLog(FrontUserSeesionInterceptor.class); private static final long serialVersionUID = 1L; private HttpServletRequest request; private HttpServletResponse response; private HttpSession session; private final List<String> virtualUserList = Arrays.asList( "financeInvestInit.do", "reportInit.do", "mailInit.do", "focusonUser.do", "focusonBorrow.do", "financeInvest.do", "addBorrowMSG.do", "addDebtMSG.do", "auctingDebtInit.do", "addAuctingDebt.do", "updatePersonImg.do", "alipayPayment.do", "sendSMS.do", "addWithdraw.do", "deleteSysMails.do","deleteWithdraw.do", "updateSys2Readed.do", "updateSys2UNReaded.do", "addMail.do", "deleteSendMails.do", "deleteReceiveMails.do","addChangeBindingMobile.do","addBindingMobile.do", "updateReceive2Readed.do", "updateReceive2UNReaded.do", "updateBasedate.do", "updatework.do", "updateLoginPass.do", "bindingMobileInit.do", "addNotesSetting.do", "addBankInfo.do", "deleteBankInfo.do", "bankChangeCancel.do", "updateBankInfo.do", "deleteuserFrend.do", "queryMyPayData.do", "submitPay.do", "delBorrowConcern.do", "automaticBidModify.do","updateUserVip.do", "automaticBidSet.do", "addAssignmentDebt.do", "cancelApplyDebt.do", "auctingDebtEnd.do", "addBorrowInit.do", "addCrediting.do","updateShiping.do", "updateBasedate.do", "updatework.do", "addImg.do","sendSMS.do", "addpastPicturdate.do", "updataUserVipStatus.do", "addBorrow.do","creditingInit.do"); //选择发标,发标,发布秒还标的,流转标发标,流转标投标 ,可转让的债权,竞拍中的债权, 债权竞拍,充值,提现,还款 private final List<String> regisCodeList = Arrays.asList("addBorrowInit.do","addBorrow.do", "addBorrowSeconds.do","addCirculationBorrow.do","subscribe.do","addAuctingDebt.do","auctingDebtInit.do", "rechargeInit.do","withdrawLoad.do","queryCanAssignmentDebt.do","queryAuctingDebt.do","addWithdraw.do", "submitPay.do","queryMyPayData.do","queryAllDetails.do","queryMyPayingBorrowList.do","financeInvest.do", "financeInvestInit.do","subscribeinit.do"); @Override public void destroy() { } @Override public void init() { } @Override 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()); int index=request.getContextPath().length()+1; String uri=request.getRequestURI().substring(index); //配置拦截器 注册码拦截 if (regisCodeList.contains(uri)){ //ConnectionManager cm = ConnectionManager.getInstance(); //String cmm = cm.getMID(); if(!"MID-22824-47058-95091-87448-87678".equals(IConstants.ZCM)){ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("<script>alert('产品未注册,请联系管理员!');window.history.go(-1);</script>"); return null; } } if (!IConstants.USER_SESSION_SWITCH) { return invocation.invoke(); } if (isAjaxRequest()) { return ajaxIntercept(invocation); } return _intercept(invocation); } // 普通请求拦截 没登录返回 noLogin 登录流程继续 @SuppressWarnings("unchecked") private String _intercept(ActionInvocation invocation) throws Exception { log.info("普通请求拦截"); AccountUserDo user = (AccountUserDo) session.getAttribute(IConstants.SESSION_USER); int index=request.getContextPath().length()+1; String uri=request.getRequestURI().substring(index); if (null == user) { /*int index = request.getContextPath().length() + 1; String uri = request.getRequestURI().substring(index);*/ Map<String, Object> parameterMap = request.getParameterMap(); StringBuffer condition = new StringBuffer(""); if (parameterMap != null) { Iterator iterator = parameterMap.keySet().iterator(); if (iterator.hasNext()) { String key = (String) iterator.next(); String[] values = (String[]) parameterMap.get(key); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } condition.append(key + "=" + valueStr + "&"); } } String param = condition.toString(); if (StringUtils.isNotBlank(param)) { param = param.substring(0, param.length() - 1); session.setAttribute("afterLoginUrl", uri + "?" + param); } else { session.setAttribute("afterLoginUrl", uri); } log.info("No Login"); return IConstants.ADMIN_AJAX_LOGIN; } /*else if(user.getVirtual() == 1){ int index=request.getContextPath().length()+1; String uri=request.getRequestURI().substring(index); if(virtualUserList.contains(uri)){ return IConstants.USER_VIRTUAL; } }*/ log.info("id:" + user.getId() + " name:" + user.getUsername()); return invocation.invoke(); } // ajax请求拦截 没登录返回 NoLogin 登录流程继续 private String ajaxIntercept(ActionInvocation invocation) throws Exception { log.info("ajax拦截"); /*ConnectionManager cm = ConnectionManager.getInstance(); String cmm = cm.getMID(); boolean b = com.shove.security.License.isSystemRegister(); if(!IConstants.ZCM.equals(cmm)){ return "network"; }*/ AccountUserDo user = (AccountUserDo) session.getAttribute(IConstants.SESSION_USER); if (null == user) { response.setContentType("text/html"); response.getWriter().print(IConstants.ADMIN_AJAX_LOGIN); log.info("No Login"); //response.sendRedirect("login.do"); return null; } /*else if(user.getVirtual() == 1){ int index=request.getContextPath().length()+1; String uri=request.getRequestURI().substring(index); if(virtualUserList.contains(uri)){ response.setContentType("text/html"); response.getWriter().print(IConstants.USER_VIRTUAL); return null; } }*/ log.info("id:" + user.getId() + " name:" + user.getUsername()); return invocation.invoke(); } @SuppressWarnings("unused") private String getRemortIP() { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } private boolean isAjaxRequest() { String header = request.getHeader("X-Requested-With"); if (header != null && "XMLHttpRequest".equals(header)) { return true; } return false; } }