123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package com.chinacreator.videoalliance.net.action;
- import com.chinacreator.common.exception.BusinessException;
- import com.chinacreator.common.pipe.DataOutPipe;
- import com.chinacreator.common.support.util.SpringContextUtil;
- import com.chinacreator.common.util.MD5;
- import com.chinacreator.videoalliance.common.annotation.DataOut;
- import com.chinacreator.videoalliance.common.bean.AreaInfo;
- import com.chinacreator.videoalliance.common.bean.CPInfo;
- import com.chinacreator.videoalliance.common.log.LogBean;
- import com.chinacreator.videoalliance.common.util.AreaUtil;
- import com.chinacreator.videoalliance.common.util.ConfigUtil;
- import com.chinacreator.videoalliance.net.bean.NetNumberLog;
- import com.chinacreator.videoalliance.net.bean.ProvinceInfo;
- import com.chinacreator.videoalliance.net.dao.NetNumberLimitDao;
- import com.chinacreator.videoalliance.net.dao.ProvinceInfoDao;
- import com.chinacreator.videoalliance.net.handler.INetHandler;
- import com.chinacreator.videoalliance.net.util.RequestUtil;
- import com.google.gson.GsonBuilder;
- import java.sql.SQLException;
- import java.util.UUID;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.lang.math.NumberUtils;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- public class NetNumberAction
- {
- private static Logger logger = Logger.getLogger("netNumber");
- private static Logger logger_sys = Logger.getLogger("NetNumberAction");
- @Autowired
- private ProvinceInfoDao provinceInfoDao;
- @Autowired
- private NetNumberLimitDao netNumberLimitDao;
- @RequestMapping({"/netNumber.do"})
- @DataOut(callback="netNumber")
- public DataOutPipe doNet(HttpServletRequest request, HttpServletResponse response) throws Exception { String userip = RequestUtil.getIpAddr(request);
- String cpid = request.getParameter("cpid");
- DataOutPipe pipe = new DataOutPipe();
- pipe.add("userid", null);
- pipe.add("flowwarn", "1");
- NetNumberLog log = getLog(request);
- String mob = "";
- try {
- logger_sys.info("ip============================"+userip);
- AreaInfo areaInfo = AreaUtil.getAreaInfoByIp(userip);
- logger_sys.info("unikey =====> " + UUID.randomUUID().toString().replaceAll("-", ""));
- if (areaInfo == null) {
- throw new BusinessException("9002", "用户IP为非3GIP", new String[0]);
- }
- log.setProvince(areaInfo.getProvince());
- mob = doNet(request, response, areaInfo, log);
- if ("302".equals(mob)) {
- logger_sys.info("302 跳转 ==================>" + mob);
- return null;
- }
- log.setResultcode(mob);
- logger_sys.info("Net取号结果==================>" + mob);
- if ((mob == null) || ("null".equals(mob))) {
- pipe.add("mob", "null");
- }
- else if (!this.netNumberLimitDao.allowNet(cpid, mob)) {
- pipe.add("userid", "null");
- } else {
- String fakeid = ConfigUtil.getFakeid(mob, cpid);
- pipe.add("userid", ConfigUtil.encrypt(fakeid, cpid));
- }
- }
- catch (Exception e) {
- log.setErrorinfo(e.getMessage());
- throw e;
- } finally {
- logger_sys.info("302 跳转 后的 finally ");
- if (!"302".equals(mob)) {
- String json = new GsonBuilder().disableHtmlEscaping().serializeNulls().create().toJson(log);
- logger.info(json);
- }
- }
- return pipe;
- }
- private boolean check(HttpServletRequest request, AreaInfo areaInfo) throws Exception
- {
- String cpid = request.getParameter("cpid");
- String timestamp = request.getParameter("timestamp");
- String responsePwd = request.getParameter("response");
- CPInfo cpInfo = ConfigUtil.getCPInfo(cpid, areaInfo.getProvince());
- String md5Str = MD5.MD5Encode(cpid + timestamp + cpInfo.getNetpwd());
- if (!md5Str.equals(responsePwd)) {
- throw new BusinessException("8005", "校验失败", new String[0]);
- }
- return true;
- }
- public String doNet(HttpServletRequest request, HttpServletResponse response, String net, int sequence) throws Exception {
- net = net.substring(0, 1).toUpperCase() + net.substring(1);
- Class<?> netHandlerClazz = Class.forName("com.chinacreator.videoalliance.net.handler." + net + "Net");
- INetHandler netHandler = (INetHandler)SpringContextUtil.getBean(netHandlerClazz);
- String mob = netHandler.execute(request, response, sequence);
- return mob;
- }
- private String doNet(HttpServletRequest request, HttpServletResponse response, AreaInfo areaInfo, NetNumberLog log) throws Exception {
- String mob = request.getParameter("mob");
- String net = request.getParameter("net");
- int sequence = NumberUtils.toInt(request.getParameter("sequence"), 0);
- String netTmp = "";
- while ((mob == null) || ("null".equals(mob))) {
- if (net == null) {
- sequence++;
- if (sequence == 1) {
- check(request, areaInfo);
- }
- ProvinceInfo provinceInfo = getNet(areaInfo.getProvince(), sequence);
- if (provinceInfo == null) {
- break;
- }
- sequence = provinceInfo.getSequence();
- net = provinceInfo.getType();
- }
- if (net != null) {
- try {
- String result = doNet(request, response, net, sequence);
- if ("302".equals(result)) {
- return "302";
- }
- mob = result;
- } catch (Throwable e) {
- mob = null;
- }
- }
- System.out.println(" netTmp = net =====> " + net);
- netTmp = net;
- net = null;
- }
- if (netTmp == null) {
- netTmp = request.getParameter("net");
- }
- log.setNettype("academe".equals(netTmp) ? "2" : "1");
- return mob;
- }
- private NetNumberLog getLog(HttpServletRequest request) {
- NetNumberLog log = (NetNumberLog)LogBean.getLogBean(NetNumberLog.class, request);
- log.setMemberId(request.getParameter("cpid"));
- log.setChannelCode(request.getParameter("channel"));
- log.setInputparam(RequestUtil.getQueryString(request));
- log.setApptype(request.getParameter("apptype"));
- log.setServicename("NET取号");
- log.setUnikey(request.getParameter("unikey"));
- log.setBackurl(request.getParameter("backurl"));
- return log;
- }
- public ProvinceInfo getNet(String province, int sequence) throws SQLException {
- return this.provinceInfoDao.getNet(province, sequence);
- }
- }
|