4a4509836aadec1350490b828b92188c490de5c8.svn-base 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package com.chinacreator.videoalliance.common.aop;
  2. import org.springframework.web.servlet.view.*;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.*;
  5. import org.apache.log4j.*;
  6. import javax.servlet.http.*;
  7. import com.chinacreator.common.pipe.*;
  8. import com.chinacreator.videoalliance.common.annotation.*;
  9. import com.chinacreator.videoalliance.common.log.*;
  10. import org.apache.commons.lang.*;
  11. import org.apache.commons.lang.math.*;
  12. import com.chinacreator.videoalliance.common.util.*;
  13. import java.net.*;
  14. import java.util.*;
  15. import com.google.gson.*;
  16. import com.chinacreator.videoalliance.order.dao.ChannelDao;
  17. import com.chinacreator.videoalliance.order.bean.ChannelOrgBean;
  18. import com.chinacreator.common.util.DESUtil;
  19. @Component("dataOutView")
  20. public class DataOutView extends AbstractView
  21. {
  22. private static Logger fileLogger;
  23. @Autowired
  24. private ChannelDao channelDao;
  25. static {
  26. DataOutView.fileLogger = Logger.getLogger("interfaceLog");
  27. }
  28. protected void renderMergedOutputModel(final Map<String, Object> model, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
  29. final DataOutPipe pipe = (DataOutPipe) model.get("pipe");
  30. if (pipe != null) {
  31. final DataOut dataOut = (DataOut) model.get("dataOut");
  32. final InterfaceLog log = LogBean.getLogBean(InterfaceLog.class, request);
  33. log.setAction(new StringBuilder().append(model.get("action")).toString());
  34. log.setMethod(new StringBuilder().append(model.get("method")).toString());
  35. log.setCpid(request.getParameter("cpid"));
  36. log.setChannel(request.getParameter("channel"));
  37. log.setErrorinfo(pipe.getErrorInfo());
  38. log.setResultcode(pipe.getResultCode());
  39. try {
  40. this.out(request, response, dataOut, pipe, log);
  41. log.setUserid(this.getUserid(request, pipe));
  42. }
  43. finally {
  44. this.log(log);
  45. }
  46. }
  47. }
  48. private String getUserid(final HttpServletRequest request, final DataOutPipe pipe) throws Exception {
  49. String userid = request.getParameter("userid");
  50. final String cpid = request.getParameter("cpid");
  51. String channel = request.getParameter("channel");
  52. String entype = request.getParameter("entype");
  53. if (StringUtils.isEmpty(userid) || "null".equals(userid)) {
  54. userid = String.valueOf(pipe.getDataMap().get("userid"));
  55. }
  56. if (StringUtils.isNotEmpty(userid) && !"null".equals(userid)) {
  57. try {
  58. //20220210,xu.zhou, 此类在videoalliance-common.jar,由于接入了渠道加密,造成解密不出手机号
  59. if ("1".equals(entype)) {//渠道方接入,使用渠道加密手机号码
  60. ChannelOrgBean channelOrgBean = channelDao.findByChannelId(channel);
  61. if (channelOrgBean != null && "0".equals(channelOrgBean.getStatus())) {
  62. userid = DESUtil.decode(userid, channelOrgBean.getPassword());
  63. }
  64. } else { //entype为空或其他值,使用CPID加密手机号码
  65. userid = ConfigUtil.decrypt(userid, cpid);
  66. }
  67. }catch (Exception ex) {
  68. ex.printStackTrace();
  69. }
  70. //长度大于11,可能是先AES再DES加密的
  71. if (userid != null && userid.length() > 11) {
  72. //20200210,xu.zhou. 捕捉异常,防止出错报500
  73. try {
  74. userid = ConfigUtil.getUserid(userid, cpid);
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. }
  80. return userid;
  81. }
  82. private int toInt(final String str, final int defaultValue) {
  83. if (str == null) {
  84. return defaultValue;
  85. }
  86. try {
  87. return Integer.parseInt(str);
  88. }
  89. catch (NumberFormatException nfe) {
  90. return defaultValue;
  91. }
  92. }
  93. private void out(final HttpServletRequest request, final HttpServletResponse response, final DataOut dataOut, final DataOutPipe pipe, final InterfaceLog log) throws Exception {
  94. int apptype = this.toInt(request.getParameter("apptype"), 1);
  95. int type = Double.valueOf(Math.pow(2, apptype)).intValue();;
  96. if ((dataOut.type() & type) == type) {
  97. if (pipe.getResultCode().equals("8000")) {
  98. pipe.setErrorInfo("系统忙,请稍后再试");
  99. }
  100. switch (type) {
  101. case 2: {
  102. this.out4web(request, response, pipe, dataOut.backurl(), log);
  103. break;
  104. }
  105. case 8: {
  106. this.out4jsonp(request, response, pipe, dataOut.callback(), log);
  107. break;
  108. }
  109. default: {
  110. this.out4json(response, pipe, log);
  111. break;
  112. }
  113. }
  114. }
  115. else {
  116. log.setResultcode("8002");
  117. log.setErrorinfo("apptype参数不正确");
  118. }
  119. }
  120. private void out4web(final HttpServletRequest request, final HttpServletResponse response, final DataOutPipe dataOutPipe, final String backurlParamName, final InterfaceLog log) throws Exception {
  121. final Map<String, Object> map = (Map<String, Object>)dataOutPipe.getDataMap();
  122. String backurl = request.getParameter(backurlParamName);
  123. if (StringUtils.isEmpty(backurl) || "null".equals(backurl)) {
  124. backurl = String.valueOf(WebUtil.getBasePath(request)) + "/404.html";
  125. }
  126. map.remove("errorinfo");
  127. if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) {
  128. map.remove("vercode");
  129. map.remove("smsContent");
  130. }
  131. if (backurl.indexOf("?") == -1) {
  132. backurl = String.valueOf(backurl) + "?";
  133. }
  134. else {
  135. backurl = String.valueOf(backurl) + "&";
  136. }
  137. final Iterator<String> it = map.keySet().iterator();
  138. while (it.hasNext()) {
  139. final String name = it.next();
  140. backurl = String.valueOf(backurl) + name + "=" + URLEncoder.encode(new StringBuilder().append(map.get(name)).toString(), "UTF-8");
  141. if (it.hasNext()) {
  142. backurl = String.valueOf(backurl) + "&";
  143. }
  144. }
  145. log.setOutput(backurl);
  146. response.sendRedirect(backurl);
  147. }
  148. private void out4json(final HttpServletResponse response, final DataOutPipe dataOutPipe, final InterfaceLog log) throws Exception {
  149. String json = dataOutPipe.toJSON();
  150. log.setOutput(json);
  151. if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) {
  152. dataOutPipe.getDataMap().remove("vercode");
  153. dataOutPipe.getDataMap().remove("smsContent");
  154. json = dataOutPipe.toJSON();
  155. }
  156. response.getWriter().print(json);
  157. }
  158. private void out4jsonp(final HttpServletRequest request, final HttpServletResponse response, final DataOutPipe dataOutPipe, String callback, final InterfaceLog log) throws Exception {
  159. String json = dataOutPipe.toJSON();
  160. if (callback == null) {
  161. callback = request.getParameter("callback");
  162. }
  163. String jsonp = String.valueOf(callback) + "(" + json + ")";
  164. log.setOutput(jsonp);
  165. if (log.getAction().equals("com.chinacreator.videoalliance.smc.action.SendSmsCodeAction")) {
  166. dataOutPipe.getDataMap().remove("vercode");
  167. dataOutPipe.getDataMap().remove("smsContent");
  168. json = dataOutPipe.toJSON();
  169. jsonp = String.valueOf(callback) + "(" + json + ")";
  170. }
  171. response.getWriter().print(jsonp);
  172. }
  173. private void log(final LogBean logBean) throws Exception {
  174. final Gson gson = new GsonBuilder().disableHtmlEscaping().serializeNulls().create();
  175. DataOutView.fileLogger.info((Object)gson.toJson((Object)logBean));
  176. }
  177. }