com.greenline.guahao.web.module.home.controllers.mobile.UnicomUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.greenline.guahao.web.module.home.controllers.mobile.UnicomUtils.java

Source

/**
 * Project: guahao-portal-web-home
 * 
 * File Created at 2012-11-30
 * 
 * Copyright 2012 Greenline.com Corporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Greenline Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Greenline.com.
 */
package com.greenline.guahao.web.module.home.controllers.mobile;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;

import com.greenline.common.util.Base64Util;
import com.greenline.common.util.DESUtil;
import com.greenline.common.util.RegexUtil;
import com.greenline.guahao.biz.enums.VerifyTypeEnum;
import com.greenline.guahao.biz.manager.cache.valid.CodeCacheManager;
import com.greenline.guahao.biz.manager.partners.unicom.UnicomManager;
import com.greenline.guahao.biz.manager.user.UserManager;
import com.greenline.guahao.biz.manager.user.dataobject.UserDO;
import com.greenline.guahao.web.module.common.constants.GlobalConstants;
import com.greenline.guahao.web.module.common.constants.MobileConstants;
import com.greenline.guahao.web.module.common.cookie.UserCookieUtil;
import com.greenline.guahao.web.module.common.utils.CommonUtils;
import com.greenline.guahao.web.module.common.utils.CryptoTools;
import com.greenline.guahao.web.module.common.utils.IpUtil;
import com.greenline.guahao.web.module.common.utils.UserUtil;
import com.greenline.guahao.web.module.home.controllers.user.UserLoginPO;

/**
 * @Type UnicomUtils
 * @Desc
 * @author ??
 * @date 2012-11-30
 * @Version V1.0
 */
@Component
public class UnicomUtils {

    private static final Log log = LogFactory.getLog(UnicomUtils.class);

    // ?? 
    private static final Integer timeout = 5 * 60 * 1000;
    // ??cookie 
    public static final Integer telphoneCookieTimeOut = 24 * 60 * 60;

    @Resource
    private HttpServletRequest request;
    @Resource
    private CodeCacheManager codeCacheManager;
    @Resource
    private UnicomManager unicomManager;
    @Resource
    private UserManager userManager;

    public String writeUserCookie(String mobile) {
        if (RegexUtil.isMobile(mobile)) {
            // cookie
            UserCookieUtil.writeKey(request, UserCookieUtil.MOBILE, mobile, UnicomUtils.telphoneCookieTimeOut);

            UserDO userDo = userManager.findUserByLoginId(mobile);
            if (null == userDo) {
                UserCookieUtil.writeKey(request, UserCookieUtil.LOGIN_ID, mobile, -1);
            } else {
                // ??
                UserUtil.writeUserCookie(request, userDo, -1);
                return GlobalConstants.REDIRECT_PER + MobileConstants.M_FASTORDER_HOME_PATH;
            }
        }
        return null;
    }

    /**
     * net??
     * 
     * @param url
     * @return
     */
    public String unicomGetMobile(final String url) {
        // ?net??
        String netCGUrl = unicomManager.getNetCGurl(IpUtil.getIpAddr(request));
        if (StringUtils.isNotBlank(netCGUrl)) {
            String code = String.valueOf(new Date().getTime() / 1000);
            // ??
            String newSign = DESUtil.DESEncode(code, MobileConstants.DESC_UNICOM_KEY);
            codeCacheManager.setCode(VerifyTypeEnum.UNICOM_NET_MOB_CODE, code, code, timeout);
            String baseurl = CommonUtils.getServerNameAndPort(request) + url + "?sign=" + newSign;
            log.info("______________base_backurl" + baseurl);
            String backurl = Base64Util.encodeBase64(baseurl, null);
            return GlobalConstants.REDIRECT_PER + netCGUrl + "?backurl=" + backurl;
        }
        return null;
    }

    /**
     * ???url
     * 
     * @param model
     * @return
     */
    public String getUnicomURL(ModelMap model, String returnpageurl) {
        return getUnicomURL(model, returnpageurl, false);
    }

    public String getUnicomURL(ModelMap model, String returnpageurl, boolean istologinpage) {
        SimpleDateFormat destsmf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        log.info("______________getUnicomURL" + destsmf.format(new Date()));
        log.info("______________??url,returnpageurl:" + returnpageurl);
        if (StringUtils.isBlank(returnpageurl)) {
            log.error("______________??url,returnpageurl");
            return null;
        }
        String returl = this.unicomGetMobile(returnpageurl);
        log.info("______________getUnicomURL" + returl);
        log.info("______________?getUnicomURL" + destsmf.format(new Date()));
        if (StringUtils.isNotBlank(returl)) {
            return returl;
        }

        if (istologinpage) {
            log.error("______________???url?");
            UserLoginPO user = new UserLoginPO();
            String loginId = UserCookieUtil.getLoginId(request);
            user.setLoginId(loginId);
            model.put("target", "/mobile/unicom_landing");
            model.put("user", user);
            request.setAttribute("noBack", Boolean.TRUE);
            return MobileConstants.M_LOGIN;
        } else {
            log.error("______________???urlreturnpageurl");
            return GlobalConstants.REDIRECT_PER + returnpageurl;
        }
    }

    /**
     * ???url????
     * 
     * @param model
     * @return
     */
    public String getPhoneFromUnicomURL() {
        log.info("______________??????");
        String sign = request.getParameter("sign");
        log.info("______________sign=" + sign);
        // ??
        String mobile = request.getParameter("mob");
        log.info("______________??????:" + mobile);
        if (StringUtils.isBlank(sign)) {
            return null;
        }

        String clientSign = DESUtil.DESDecode(sign, MobileConstants.DESC_UNICOM_KEY);
        String cookiecode = codeCacheManager.getCode(VerifyTypeEnum.UNICOM_NET_MOB_CODE, clientSign);
        codeCacheManager.delCode(VerifyTypeEnum.UNICOM_NET_MOB_CODE, clientSign);
        if (StringUtils.isNotBlank(mobile)) {
            mobile = CryptoTools.decode(mobile, unicomManager.getSpPassWord());
            log.info("______________???????:" + mobile);
            log.info("______________cookiecode:" + cookiecode + "___________clientSign:" + clientSign);
            if (clientSign.equalsIgnoreCase(cookiecode)) {
                if (RegexUtil.isMobile(StringUtils.trim(mobile))) {
                    // cookie
                    UserCookieUtil.writeKey(request, UserCookieUtil.MOBILE, mobile, telphoneCookieTimeOut);
                    UserCookieUtil.writeKey(request, UserCookieUtil.LOGIN_ID, mobile, -1);
                }
                return mobile;
            } else {
                log.error("______________???????:"
                        + CommonUtils.getRequestUrl(request));
            }
        }
        return null;
    }

    /**
     * ??net??
     * 
     * @return
     */
    public String unicomLogin() {
        SimpleDateFormat destsmf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // cookie??????????
        String mobile = UserCookieUtil.getMobile(request);
        log.info("______________cookie???" + mobile);
        if (StringUtils.isBlank(mobile)) {
            // ?net??
            if ("1".equals(request.getParameter("home"))) {
                log.info("______________unicomGetMobile" + destsmf.format(new Date()));
                String returl = this.unicomGetMobile(MobileConstants.M_LOGIN_PATH);
                log.info("______________unicomGetMobile.returl" + returl);
                log.info("______________?unicomGetMobile" + destsmf.format(new Date()));
                return returl;
            }
        }

        log.info("______________?______________");
        // ?????
        if (StringUtils.isNotBlank(mobile) || StringUtils.isNotBlank(request.getParameter("sign"))) {
            log.info("______________automaticLogin" + destsmf.format(new Date()));
            String returl = this.automaticLogin(mobile);
            log.info("______________automaticLogin.returl" + returl);
            log.info("______________?automaticLogin" + destsmf.format(new Date()));
            return returl;
        }
        return null;
    }

    /**
     * 
     * 
     * @param model
     * @return
     */
    private String automaticLogin(String telphone) {
        // 1cookie???
        if (RegexUtil.isMobile(StringUtils.trim(telphone))) {
            log.info("______________cookie???" + telphone + "");
            String returl = this.writeUserCookie(telphone);
            log.info("______________cookie????,returl=" + returl);
            return returl;
        }

        // 2???????
        log.info("______________???????");
        String sign = request.getParameter("sign");
        log.info("______________sign=" + sign);
        String clientSign = DESUtil.DESDecode(sign, MobileConstants.DESC_UNICOM_KEY);
        String cookiecode = codeCacheManager.getCode(VerifyTypeEnum.UNICOM_NET_MOB_CODE, clientSign);
        codeCacheManager.delCode(VerifyTypeEnum.UNICOM_NET_MOB_CODE, clientSign);
        // ??
        String mobile = request.getParameter("mob");
        log.info("______________??????:" + mobile);
        if (StringUtils.isNotBlank(mobile)) {
            mobile = CryptoTools.decode(mobile, unicomManager.getSpPassWord());
            log.info("______________???????:" + mobile);
            if (clientSign.equalsIgnoreCase(cookiecode)) {
                return this.writeUserCookie(mobile);
            } else {
                log.error("______________???????:"
                        + CommonUtils.getRequestUrl(request));
            }
        }

        return null;
    }
}