package com.chinacreator.videoalliance.common.aop; import org.springframework.web.servlet.view.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.*; import org.apache.log4j.*; import javax.servlet.http.*; import com.chinacreator.common.pipe.*; import com.chinacreator.videoalliance.common.annotation.*; import com.chinacreator.videoalliance.common.log.*; import org.apache.commons.lang.*; import org.apache.commons.lang.math.*; import com.chinacreator.videoalliance.common.util.*; import java.net.*; import java.util.*; import com.google.gson.*; import com.chinacreator.videoalliance.order.dao.ChannelDao; import com.chinacreator.videoalliance.order.bean.ChannelOrgBean; import com.chinacreator.common.util.DESUtil; @Component("dataOutView") public class DataOutView extends AbstractView { private static Logger fileLogger; @Autowired private ChannelDao channelDao; static { DataOutView.fileLogger = Logger.getLogger("interfaceLog"); } protected void renderMergedOutputModel(final Map model, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final DataOutPipe pipe = (DataOutPipe) model.get("pipe"); if (pipe != null) { final DataOut dataOut = (DataOut) model.get("dataOut"); final InterfaceLog log = LogBean.getLogBean(InterfaceLog.class, request); log.setAction(new StringBuilder().append(model.get("action")).toString()); log.setMethod(new StringBuilder().append(model.get("method")).toString()); log.setCpid(request.getParameter("cpid")); log.setChannel(request.getParameter("channel")); log.setErrorinfo(pipe.getErrorInfo()); log.setResultcode(pipe.getResultCode()); try { this.out(request, response, dataOut, pipe, log); log.setUserid(this.getUserid(request, pipe)); } finally { this.log(log); } } } private String getUserid(final HttpServletRequest request, final DataOutPipe pipe) throws Exception { String userid = request.getParameter("userid"); final String cpid = request.getParameter("cpid"); String channel = request.getParameter("channel"); String entype = request.getParameter("entype"); if (StringUtils.isEmpty(userid) || "null".equals(userid)) { userid = String.valueOf(pipe.getDataMap().get("userid")); } if (StringUtils.isNotEmpty(userid) && !"null".equals(userid)) { try { //20220210,xu.zhou, 此类在videoalliance-common.jar,由于接入了渠道加密,造成解密不出手机号 if ("1".equals(entype)) {//渠道方接入,使用渠道加密手机号码 ChannelOrgBean channelOrgBean = channelDao.findByChannelId(channel); if (channelOrgBean != null && "0".equals(channelOrgBean.getStatus())) { userid = DESUtil.decode(userid, channelOrgBean.getPassword()); } } else { //entype为空或其他值,使用CPID加密手机号码 userid = ConfigUtil.decrypt(userid, cpid); } }catch (Exception ex) { ex.printStackTrace(); } //长度大于11,可能是先AES再DES加密的 if (userid != null && userid.length() > 11) { //20200210,xu.zhou. 捕捉异常,防止出错报500 try { userid = ConfigUtil.getUserid(userid, cpid); } catch (Exception e) { e.printStackTrace(); } } } return userid; } private int toInt(final String str, final int defaultValue) { if (str == null) { return defaultValue; } try { return Integer.parseInt(str); } catch (NumberFormatException nfe) { return defaultValue; } } private void out(final HttpServletRequest request, final HttpServletResponse response, final DataOut dataOut, final DataOutPipe pipe, final InterfaceLog log) throws Exception { int apptype = this.toInt(request.getParameter("apptype"), 1); int type = Double.valueOf(Math.pow(2, apptype)).intValue();; if ((dataOut.type() & type) == type) { if (pipe.getResultCode().equals("8000")) { pipe.setErrorInfo("系统忙,请稍后再试"); } switch (type) { case 2: { this.out4web(request, response, pipe, dataOut.backurl(), log); break; } case 8: { this.out4jsonp(request, response, pipe, dataOut.callback(), log); break; } default: { this.out4json(response, pipe, log); break; } } } else { log.setResultcode("8002"); log.setErrorinfo("apptype参数不正确"); } } private void out4web(final HttpServletRequest request, final HttpServletResponse response, final DataOutPipe dataOutPipe, final String backurlParamName, final InterfaceLog log) throws Exception { final Map map = (Map)dataOutPipe.getDataMap(); String backurl = request.getParameter(backurlParamName); if (StringUtils.isEmpty(backurl) || "null".equals(backurl)) { backurl = String.valueOf(WebUtil.getBasePath(request)) + "/404.html"; } map.remove("errorinfo"); if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) { map.remove("vercode"); map.remove("smsContent"); } if (backurl.indexOf("?") == -1) { backurl = String.valueOf(backurl) + "?"; } else { backurl = String.valueOf(backurl) + "&"; } final Iterator it = map.keySet().iterator(); while (it.hasNext()) { final String name = it.next(); backurl = String.valueOf(backurl) + name + "=" + URLEncoder.encode(new StringBuilder().append(map.get(name)).toString(), "UTF-8"); if (it.hasNext()) { backurl = String.valueOf(backurl) + "&"; } } log.setOutput(backurl); response.sendRedirect(backurl); } private void out4json(final HttpServletResponse response, final DataOutPipe dataOutPipe, final InterfaceLog log) throws Exception { String json = dataOutPipe.toJSON(); log.setOutput(json); if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) { dataOutPipe.getDataMap().remove("vercode"); dataOutPipe.getDataMap().remove("smsContent"); json = dataOutPipe.toJSON(); } response.getWriter().print(json); } private void out4jsonp(final HttpServletRequest request, final HttpServletResponse response, final DataOutPipe dataOutPipe, String callback, final InterfaceLog log) throws Exception { String json = dataOutPipe.toJSON(); if (callback == null) { callback = request.getParameter("callback"); } String jsonp = String.valueOf(callback) + "(" + json + ")"; log.setOutput(jsonp); if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) { dataOutPipe.getDataMap().remove("vercode"); dataOutPipe.getDataMap().remove("smsContent"); json = dataOutPipe.toJSON(); jsonp = String.valueOf(callback) + "(" + json + ")"; } response.getWriter().print(jsonp); } private void log(final LogBean logBean) throws Exception { final Gson gson = new GsonBuilder().disableHtmlEscaping().serializeNulls().create(); DataOutView.fileLogger.info((Object)gson.toJson((Object)logBean)); } }