ab721109d2cd09ebf31bfe9533ff3e3822194613.svn-base 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.chinacreator.videoalliance.net.action;
  2. import com.chinacreator.common.exception.BusinessException;
  3. import com.chinacreator.common.pipe.DataOutPipe;
  4. import com.chinacreator.common.support.util.SpringContextUtil;
  5. import com.chinacreator.common.util.MD5;
  6. import com.chinacreator.videoalliance.common.annotation.DataOut;
  7. import com.chinacreator.videoalliance.common.bean.AreaInfo;
  8. import com.chinacreator.videoalliance.common.bean.CPInfo;
  9. import com.chinacreator.videoalliance.common.log.LogBean;
  10. import com.chinacreator.videoalliance.common.util.AreaUtil;
  11. import com.chinacreator.videoalliance.common.util.ConfigUtil;
  12. import com.chinacreator.videoalliance.net.bean.NetNumberLog;
  13. import com.chinacreator.videoalliance.net.bean.ProvinceInfo;
  14. import com.chinacreator.videoalliance.net.dao.NetNumberLimitDao;
  15. import com.chinacreator.videoalliance.net.dao.ProvinceInfoDao;
  16. import com.chinacreator.videoalliance.net.handler.INetHandler;
  17. import com.chinacreator.videoalliance.net.util.RequestUtil;
  18. import com.google.gson.GsonBuilder;
  19. import java.sql.SQLException;
  20. import java.util.UUID;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import org.apache.commons.lang.math.NumberUtils;
  24. import org.apache.log4j.Logger;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Controller;
  27. import org.springframework.web.bind.annotation.RequestMapping;
  28. @Controller
  29. public class NetNumberAction
  30. {
  31. private static Logger logger = Logger.getLogger("netNumber");
  32. private static Logger logger_sys = Logger.getLogger("NetNumberAction");
  33. @Autowired
  34. private ProvinceInfoDao provinceInfoDao;
  35. @Autowired
  36. private NetNumberLimitDao netNumberLimitDao;
  37. @RequestMapping({"/netNumber.do"})
  38. @DataOut(callback="netNumber")
  39. public DataOutPipe doNet(HttpServletRequest request, HttpServletResponse response) throws Exception { String userip = RequestUtil.getIpAddr(request);
  40. String cpid = request.getParameter("cpid");
  41. DataOutPipe pipe = new DataOutPipe();
  42. pipe.add("userid", null);
  43. pipe.add("flowwarn", "1");
  44. NetNumberLog log = getLog(request);
  45. String mob = "";
  46. try {
  47. logger_sys.info("ip============================"+userip);
  48. AreaInfo areaInfo = AreaUtil.getAreaInfoByIp(userip);
  49. logger_sys.info("unikey =====> " + UUID.randomUUID().toString().replaceAll("-", ""));
  50. if (areaInfo == null) {
  51. throw new BusinessException("9002", "用户IP为非3GIP", new String[0]);
  52. }
  53. log.setProvince(areaInfo.getProvince());
  54. mob = doNet(request, response, areaInfo, log);
  55. if ("302".equals(mob)) {
  56. logger_sys.info("302 跳转 ==================>" + mob);
  57. return null;
  58. }
  59. log.setResultcode(mob);
  60. logger_sys.info("Net取号结果==================>" + mob);
  61. if ((mob == null) || ("null".equals(mob))) {
  62. pipe.add("mob", "null");
  63. }
  64. else if (!this.netNumberLimitDao.allowNet(cpid, mob)) {
  65. pipe.add("userid", "null");
  66. } else {
  67. String fakeid = ConfigUtil.getFakeid(mob, cpid);
  68. pipe.add("userid", ConfigUtil.encrypt(fakeid, cpid));
  69. }
  70. }
  71. catch (Exception e) {
  72. log.setErrorinfo(e.getMessage());
  73. throw e;
  74. } finally {
  75. logger_sys.info("302 跳转 后的 finally ");
  76. if (!"302".equals(mob)) {
  77. String json = new GsonBuilder().disableHtmlEscaping().serializeNulls().create().toJson(log);
  78. logger.info(json);
  79. }
  80. }
  81. return pipe;
  82. }
  83. private boolean check(HttpServletRequest request, AreaInfo areaInfo) throws Exception
  84. {
  85. String cpid = request.getParameter("cpid");
  86. String timestamp = request.getParameter("timestamp");
  87. String responsePwd = request.getParameter("response");
  88. CPInfo cpInfo = ConfigUtil.getCPInfo(cpid, areaInfo.getProvince());
  89. String md5Str = MD5.MD5Encode(cpid + timestamp + cpInfo.getNetpwd());
  90. if (!md5Str.equals(responsePwd)) {
  91. throw new BusinessException("8005", "校验失败", new String[0]);
  92. }
  93. return true;
  94. }
  95. public String doNet(HttpServletRequest request, HttpServletResponse response, String net, int sequence) throws Exception {
  96. net = net.substring(0, 1).toUpperCase() + net.substring(1);
  97. Class<?> netHandlerClazz = Class.forName("com.chinacreator.videoalliance.net.handler." + net + "Net");
  98. INetHandler netHandler = (INetHandler)SpringContextUtil.getBean(netHandlerClazz);
  99. String mob = netHandler.execute(request, response, sequence);
  100. return mob;
  101. }
  102. private String doNet(HttpServletRequest request, HttpServletResponse response, AreaInfo areaInfo, NetNumberLog log) throws Exception {
  103. String mob = request.getParameter("mob");
  104. String net = request.getParameter("net");
  105. int sequence = NumberUtils.toInt(request.getParameter("sequence"), 0);
  106. String netTmp = "";
  107. while ((mob == null) || ("null".equals(mob))) {
  108. if (net == null) {
  109. sequence++;
  110. if (sequence == 1) {
  111. check(request, areaInfo);
  112. }
  113. ProvinceInfo provinceInfo = getNet(areaInfo.getProvince(), sequence);
  114. if (provinceInfo == null) {
  115. break;
  116. }
  117. sequence = provinceInfo.getSequence();
  118. net = provinceInfo.getType();
  119. }
  120. if (net != null) {
  121. try {
  122. String result = doNet(request, response, net, sequence);
  123. if ("302".equals(result)) {
  124. return "302";
  125. }
  126. mob = result;
  127. } catch (Throwable e) {
  128. mob = null;
  129. }
  130. }
  131. System.out.println(" netTmp = net =====> " + net);
  132. netTmp = net;
  133. net = null;
  134. }
  135. if (netTmp == null) {
  136. netTmp = request.getParameter("net");
  137. }
  138. log.setNettype("academe".equals(netTmp) ? "2" : "1");
  139. return mob;
  140. }
  141. private NetNumberLog getLog(HttpServletRequest request) {
  142. NetNumberLog log = (NetNumberLog)LogBean.getLogBean(NetNumberLog.class, request);
  143. log.setMemberId(request.getParameter("cpid"));
  144. log.setChannelCode(request.getParameter("channel"));
  145. log.setInputparam(RequestUtil.getQueryString(request));
  146. log.setApptype(request.getParameter("apptype"));
  147. log.setServicename("NET取号");
  148. log.setUnikey(request.getParameter("unikey"));
  149. log.setBackurl(request.getParameter("backurl"));
  150. return log;
  151. }
  152. public ProvinceInfo getNet(String province, int sequence) throws SQLException {
  153. return this.provinceInfoDao.getNet(province, sequence);
  154. }
  155. }