public static void main(String[] args) {
    try {
      String s = new String("投之家tzj".getBytes(UTF_8_CHARSET), UTF_8_CHARSET);

      System.out.println(MD5.toMD5(s));
      System.out.println(s.length());
      try {
        System.out.println(EncryptMD5.toMD5(s));
      } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      System.out.println(s.length());
    } catch (UnsupportedEncodingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  /**
   * Description:登录方法<br>
   *
   * @author justin.xu
   * @version 0.1 2014年5月7日
   * @param request
   * @param session
   * @param response
   * @param memberLoginCnd
   * @return String
   */
  @RequestMapping(value = "/login")
  @ValidateToken
  @ResponseBody
  public MessageBox login(
      HttpSession session, HttpServletResponse response, MemberLoginCnd memberLoginCnd)
      throws AuthenticationException {
    try {
      Object object = session.getAttribute(CSRFTokenManager.CSRF_PARAM_COUNTER);
      if (object != null && ((Integer) (object)).intValue() > 2) {
        if (memberLoginCnd.getCheckCode() == null || "".equals(memberLoginCnd.getCheckCode())) {
          return MessageBox.build("0", "请你输入验证码");
        }
        String randomCode = (String) currentSession().getAttribute("randomCode");
        if (!memberLoginCnd.getCheckCode().equals(randomCode)) {
          return MessageBox.build("0", "验证码不正确");
        }
      }

      long t1 = System.currentTimeMillis();
      logger.info(memberLoginCnd.getUsername() + " ----- login ----- begin time : " + t1);

      // shiro登录
      UsernamePasswordToken token =
          new UsernamePasswordToken(
              memberLoginCnd.getUsername(),
              MD5.toMD5(memberLoginCnd.getPasswd()),
              BusinessConstants.MEMBER_OPERATE_ON_PORTAL);
      Subject subject = SecurityUtils.getSubject();
      subject.login(token);

      long t2 = System.currentTimeMillis();
      logger.info(
          memberLoginCnd.getUsername() + " ----- login ----- shiro login cost : " + (t2 - t1));

      LoginCnd loginCnd = new LoginCnd();
      loginCnd.setUserId(currentUser().getUserId());
      loginCnd.setUserName(currentUser().getUserName());
      loginCnd.setIp(HttpTookit.getRealIpAddr(currentRequest()));
      loginCnd.setSessionId(session.getId());
      loginCnd.setPlatform(currentUser().getPlatform());
      // 调用登录逻辑
      String msg = memberService.saveLogin(loginCnd);

      long t3 = System.currentTimeMillis();
      logger.info(
          memberLoginCnd.getUsername() + " ----- login ----- save login cost : " + (t3 - t2));

      // 用于sso
      cookieRetrievingCookieGenerator.addCookie(
          currentRequest(), response, TicketCryptor.encrypt(currentUser().getSsoTicket()));

      long t4 = System.currentTimeMillis();
      logger.error(
          memberLoginCnd.getUsername() + " ----- login ----- add sso cookie cost : " + (t4 - t3));
      System.out.println(memberLoginCnd.getSaveid() + "hhe");
      // 保存cookie
      if ("1".equals(memberLoginCnd.getSaveid())) {
        CookieGenerator cookieGenerator = new CookieGenerator();
        cookieGenerator.setCookieMaxAge(2147483647);
        cookieGenerator.setCookieName(COOKIE_LOGIN_USERID);
        cookieGenerator.addCookie(response, memberLoginCnd.getCookieusername());
      } else {
        CookieGenerator cookieGenerator = new CookieGenerator();
        cookieGenerator.setCookieMaxAge(0);
        cookieGenerator.setCookieName(COOKIE_LOGIN_USERID);
        cookieGenerator.addCookie(response, memberLoginCnd.getCookieusername());
      }

      long t5 = System.currentTimeMillis();
      logger.error(
          memberLoginCnd.getUsername()
              + " ----- login ----- add username cookie cost : "
              + (t5 - t4));

      // 小红点提示状态
      RedAccount redAccount = redAccountService.queryRedDotState(currentUser().getUserId());
      if (redAccount != null) {
        currentSession().setAttribute("redDot", redAccount);
      }
      // 抽奖机会提醒
      int lotteryChanceCount =
          lotteryChanceInfoService.queryLotteryNumTotal("11", currentUser().getUserId());
      if (lotteryChanceCount > 0) {
        currentSession().setAttribute("lotteryChanceCount", lotteryChanceCount);
      }
      if (BusinessConstants.VISITOR_UNAUTHERIZED.equals(msg)) {
        return MessageBox.build("2", "请先前往认证");
      }

      if (object != null) {
        currentSession().removeAttribute(CSRFTokenManager.CSRF_PARAM_COUNTER);
      }
    } catch (UnknownAccountException e) {
      return MessageBox.build("0", "账户名不存在");
    } catch (IncorrectCredentialsException ice) {
      return MessageBox.build("0", "账户名与密码不匹配");
    } catch (LockedAccountException lae) {
      return MessageBox.build("0", "账户已经锁定");
    } catch (Exception e) {
      if (isLogin()) {
        SecurityUtils.getSubject().logout();
      }
      logger.error("登录失败", e);
      return MessageBox.buildForCounter("3", "账号与密码不匹配");
    }

    String backUrl = memberLoginCnd.getBackUrl();
    if (backUrl != null && !backUrl.trim().equals("")) {
      logger.info("******自动跳转登陆前页面=" + backUrl + "******");
      return MessageBox.build("8", backUrl);
    }

    return MessageBox.build("1", "success");
  }