123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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<String, Object> 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<String, Object> map = (Map<String, Object>)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<String> 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));
- }
- }
|