Java tutorial
/* * Project: min-portal-web-home * * File Created at 2014-5-13 * * 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.vip.taikang; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.greenline.common.util.DESUtil; import com.greenline.common.util.MD5Util; import com.greenline.guahao.biz.common.BizConstants; import com.greenline.guahao.biz.enums.CertTypEnum; import com.greenline.guahao.biz.manager.externalfastlogin.ExternalFastLoginManager; import com.greenline.guahao.biz.manager.externalfastlogin.dataobject.UserFastLoginDO; import com.greenline.guahao.biz.manager.user.UserManager; import com.greenline.guahao.biz.manager.user.dataobject.UserDO; import com.greenline.guahao.biz.manager.user.result.LoginResult; import com.greenline.guahao.web.module.common.annotation.MethodRemark; import com.greenline.guahao.web.module.common.constants.GlobalConstants; import com.greenline.guahao.web.module.common.utils.CommonUtils; 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.InitHomeContentProcess; import com.greenline.guahao.web.module.home.controllers.pub.orderremind.OrderRemindProcessor; /** * @Type TaiKangController * @Desc ? * @author alex * @date 2014-5-13 * @Version V1.0 */ @Controller @RequestMapping("/vip/taikang") public class TaiKangController { private static final Log logger = LogFactory.getLog(TaiKangController.class); /** * ?id */ private static final String PARTNER_ID_TAIKANG = "taikang999000000"; /** * DES */ private static final String URL_ENCODE_KEY = "123$%^789@guahaocom"; /** * ??key */ private static final String SIGN_DES_KEY = "12SqqsRfflliiiaooii9999@#"; /** * ?PC */ private static final String LOGIN_TYPE_PC = "pc"; @Resource private InitHomeContentProcess initHomeContentProcess; @Resource private HttpServletRequest request; @Resource private ExternalFastLoginManager externalFastLoginManager; @Resource private UserManager userManager; @Resource private OrderRemindProcessor orderRemindProcessor; public String loginTest(ModelMap model, @RequestParam(value = "extUserId", required = false, defaultValue = "88888887") String extUserId, @RequestParam(value = "name", required = false, defaultValue = "?") String name, @RequestParam(value = "idcard", required = false, defaultValue = "211422196406103817") String idcard, @RequestParam(value = "email", required = false, defaultValue = "") String email, @RequestParam(value = "mobile", required = false, defaultValue = "") String mobile, @RequestParam(value = "sex", required = false, defaultValue = "") String sex) { String info = "id=" + extUserId + ",name=" + name + ",idcard=" + idcard + ",email=" + email + ",mobile=" + mobile + ",sex=" + sex; String encodeInfo = DESUtil.DESEncode(info, URL_ENCODE_KEY); String timestamp = new SimpleDateFormat("yyMMddHHmmss").format(new Date()); String sign = MD5Util.getMD5Format(info + timestamp + MD5Util.getMD5Format(SIGN_DES_KEY)); model.put("uri", "/vip/taikang/login"); model.put("partnerid", PARTNER_ID_TAIKANG); model.put("type", LOGIN_TYPE_PC); model.put("info", encodeInfo); model.put("sign", sign); model.put("timestamp", timestamp); return "vip/test_taikang_login"; } /** * ?,partnerid=taikang999000000,info=DES(id=1132132,name=??,idcard= * 330303198301253193 * ,email=gg@gmail.com,mobile=13456758654,sex=1),timestamp * =yyMMddHHmmsss,type=pc,sign=MD5(info+ * timestamp+MD5(descKey))descKey=12SqqsRfflliiiaooii9999@# * * @param model * @return String */ @RequestMapping(value = "/login") @MethodRemark(value = "remark=??") public String fastLogin(ModelMap model, HttpServletResponse response) { String partnerid = request.getParameter("partnerid"); String type = request.getParameter("type"); String info = request.getParameter("info"); String sign = request.getParameter("sign"); String timestamp = request.getParameter("timestamp"); if (!PARTNER_ID_TAIKANG.equals(partnerid) || !LOGIN_TYPE_PC.equals(type)) { // ? logger.error("??partneridtype.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } // ? if (StringUtils.isBlank(info)) { // ? logger.error("??.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } // info String userInfo = DESUtil.DESDecode(info, URL_ENCODE_KEY); // ?? String mySign = MD5Util.getMD5Format(userInfo + timestamp + MD5Util.getMD5Format(SIGN_DES_KEY)); if (!mySign.equals(sign)) { // ?? logger.error("???.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } // ?? String[] users = userInfo.split(","); if (null == users || users.length != 6) { // ??6?? logger.error("??.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } else { // idname if (null == users[0].split("=") || users[0].split("=").length != 2 || StringUtils.isBlank(users[0].split("=")[1])) { // id logger.error("??id.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } if (null == users[1].split("=") || users[1].split("=").length != 2 || StringUtils.isBlank(users[1].split("=")[1])) { // name logger.error("??name.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } String[] idcard = users[2].split("="); if (null == idcard || idcard.length != 2 || StringUtils.isBlank(idcard[1])) { // ? logger.error("??idcard.url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } } try { // 6,id???? UserFastLoginDO userFastLoginDO = this.setLoginDO(users); // ? boolean flag = canFastLogin(userFastLoginDO); if (!flag) { // logger.info(".url=" + getPostUrl()); return CommonUtils.goErrorPage(model, ""); } else { // ? orderRemindProcessor.pushCustomerIdToCookieAfterLogin(); // ?? return GlobalConstants.REDIRECT_PER + "/vip"; } } catch (Exception e) { logger.error(".url=" + getPostUrl(), e); return CommonUtils.goErrorPage(model, ""); } } /** * ?? * * @return String */ private String getPostUrl() { String partnerid = request.getParameter("partnerid"); String type = request.getParameter("type"); String info = request.getParameter("info"); String sign = request.getParameter("sign"); String timestamp = request.getParameter("timestamp"); String url = CommonUtils.getServerNameAndPort(request); return url + "?partnerid=" + partnerid + "&type=" + type + "&info=" + info + "&sign=" + sign + "×tamp=" + timestamp; } /** * * * @param users * @return UserFastLoginDO */ private UserFastLoginDO setLoginDO(String[] users) { UserFastLoginDO userFastLoginDO = new UserFastLoginDO(); String id = users[0].split("=")[1]; String name = users[1].split("=")[1]; if (id.length() > 64) { userFastLoginDO.setUserId(id.substring(0, 64)); } else { userFastLoginDO.setUserId(id); } if (name.length() > 50) { userFastLoginDO.setRealName(name.substring(0, 50)); } else { userFastLoginDO.setRealName(name); } if (null != users[2].split("=") && users[2].split("=").length == 2) { // ? String idcard = users[2].split("=")[1]; userFastLoginDO.setCertType(CertTypEnum.IDCARD.getValue()); userFastLoginDO.setCertNo(idcard); } if (null != users[3].split("=") && users[3].split("=").length == 2) { // String email = users[3].split("=")[1]; userFastLoginDO.setEmail(email); } if (null != users[4].split("=") && users[4].split("=").length == 2) { // String mobile = users[4].split("=")[1]; userFastLoginDO.setMobile(mobile); } if (null != users[5].split("=") && users[5].split("=").length == 2) { // String sex = users[5].split("=")[1]; if (StringUtils.isNumeric(sex)) { userFastLoginDO.setSex(Integer.valueOf(sex)); } } return userFastLoginDO; } /** * * * @param userId * @param source * @return boolean */ private boolean canFastLogin(UserFastLoginDO userFastLoginDO) { LoginResult r = fastLogin(userFastLoginDO); if (r.isLoginSuccess()) { UserDO userDO = r.getUserDO(); userDO.setPartnerId(PARTNER_ID_TAIKANG); // ?? UserUtil.writeUserCookie(request, userDO, -1); logger.info("?"); return Boolean.TRUE; } else { logger.error("?:" + r.getErrorMsg()); return Boolean.FALSE; } } /** * ? * * @param userFastLoginDO * @return LoginResult */ private LoginResult fastLogin(UserFastLoginDO userFastLoginDO) { userFastLoginDO.setAppId(BizConstants.VIP_TAIKANG_NAME); userFastLoginDO.setLoginId(userFastLoginDO.getAppId() + "_" + userFastLoginDO.getUserId()); // ????? userFastLoginDO.setPwd(userFastLoginDO.getUserId() + CommonUtils.createRandomPassword()); userFastLoginDO.setIp(IpUtil.getIpAddr(request)); userFastLoginDO.setLocation(""); userFastLoginDO.setSource(BizConstants.VIP_TAIKANG_SOURCE_ID); return externalFastLoginManager.externalFastLogin(userFastLoginDO); } }