PublicController.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.goafanti.common.controller;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.util.EntityUtils;
  8. import org.junit.Test;
  9. import org.springframework.context.annotation.Scope;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestMethod;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import com.aliyuncs.DefaultAcsClient;
  15. import com.aliyuncs.IAcsClient;
  16. import com.aliyuncs.exceptions.ClientException;
  17. import com.aliyuncs.exceptions.ServerException;
  18. import com.aliyuncs.profile.DefaultProfile;
  19. import com.aliyuncs.profile.IClientProfile;
  20. import com.aliyuncs.sms.model.v20160927.SingleSendSmsRequest;
  21. import com.aliyuncs.sms.model.v20160927.SingleSendSmsResponse;
  22. import com.goafanti.common.bo.Result;
  23. import com.goafanti.common.constant.ErrorConstants;
  24. import com.goafanti.common.utils.HttpUtils;
  25. import com.goafanti.common.utils.LoggerUtils;
  26. import com.goafanti.common.utils.TimeUtils;
  27. import com.goafanti.common.utils.VerifyCodeUtils;
  28. import com.goafanti.core.shiro.token.TokenManager;
  29. @Controller
  30. @Scope(value = "prototype")
  31. @RequestMapping("/open")
  32. public class PublicController extends BaseController {
  33. /**
  34. * 获取验证码
  35. *
  36. * @param response
  37. */
  38. @RequestMapping(value = "/getVCode", method = RequestMethod.GET)
  39. public void getVCode(HttpServletResponse response, HttpServletRequest request) {
  40. try {
  41. response.setHeader("Pragma", "No-cache");
  42. response.setHeader("Cache-Control", "no-cache");
  43. response.setDateHeader("Expires", 0);
  44. response.setContentType("image/jpg");
  45. // 生成随机字串
  46. String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
  47. // 存入Shiro会话session
  48. TokenManager.setVal2Session(VerifyCodeUtils.V_CODE, verifyCode.toLowerCase());
  49. System.out.println(TokenManager.getSession().getAttribute(VerifyCodeUtils.V_CODE));
  50. // 生成图片
  51. int w = 146, h = 33;
  52. VerifyCodeUtils.outputImage(w, h, response.getOutputStream(), verifyCode);
  53. } catch (Exception e) {
  54. LoggerUtils.fmtError(getClass(), e, "获取验证码异常:%s", e.getMessage());
  55. }
  56. }
  57. /**
  58. * 手机验证码
  59. * @param mobile
  60. */
  61. @RequestMapping(value = "/getMCode", method = RequestMethod.GET)
  62. @ResponseBody
  63. public Result getMcode(String mobile){
  64. Result res = new Result();
  65. if(TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME)==null
  66. ||TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME)==""){
  67. sendMessage(mobile,res);
  68. }else if(TimeUtils.checkOverTime("getMCode")){
  69. TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE);
  70. TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE_TIME);
  71. sendMessage(mobile,res);
  72. }else{
  73. res.getError().add(buildError(ErrorConstants.MCODE_ERROR,"手机验证码发送频繁"));
  74. }
  75. return res;
  76. }
  77. /**
  78. * 阿里云短信服务
  79. * @param mobile
  80. * @param res
  81. * @return
  82. *//*
  83. private Result sendMessage(String mobile,Result res){
  84. // 生成随机字串
  85. String mobileVerifyCode = VerifyCodeUtils.generateMobileVerifyCode(6);
  86. // 存入Shiro会话session
  87. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE, mobileVerifyCode);
  88. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE_TIME, System.currentTimeMillis());
  89. String host = "http://sms.market.alicloudapi.com";
  90. String path = "/singleSendSms";
  91. String method = "GET";
  92. Map<String, String> headers = new HashMap<String, String>();
  93. headers.put("Authorization", "APPCODE 8e5441493d01490889d034d8456b23db");
  94. Map<String, String> querys = new HashMap<String, String>();
  95. querys.put("ParamString", "{\"code\":\""+mobileVerifyCode+"\"}");
  96. querys.put("RecNum", mobile);
  97. querys.put("SignName", "阿凡提信息科技");
  98. querys.put("TemplateCode", "SMS_37125144");
  99. try {
  100. HttpResponse response =HttpUtils.doGet(host, path, method, headers, querys);
  101. //HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
  102. //System.out.println(response.toString());
  103. //获取response的body
  104. System.out.println(EntityUtils.toString(response.getEntity()));
  105. } catch (Exception e) {
  106. res.getError().add(buildError(ErrorConstants.MCODE_ERROR,"获取手机验证码异常"));
  107. LoggerUtils.fmtError(getClass(), e, "获取手机验证码异常:%s", e.getMessage());
  108. }
  109. return res;
  110. }*/
  111. /**
  112. *
  113. * @param mobile
  114. * @param res
  115. * @return
  116. */
  117. private Result sendMessage(String mobile,Result res) {
  118. // 生成随机字串
  119. String mobileVerifyCode = VerifyCodeUtils.generateMobileVerifyCode(6);
  120. // 存入Shiro会话session
  121. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE, mobileVerifyCode);
  122. System.out.println(TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE));
  123. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE_TIME, System.currentTimeMillis());
  124. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAIqTgQLLwz252Z", "ICGuiUnqzaar7urw4zecVcJrJ1MHg9");
  125. try {
  126. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Sms", "sms.aliyuncs.com");
  127. } catch (ClientException e1) {
  128. res.getError().add(buildError(ErrorConstants.MCODE_ERROR,"获取手机验证码异常"));
  129. }
  130. IAcsClient client = new DefaultAcsClient(profile);
  131. SingleSendSmsRequest request = new SingleSendSmsRequest();
  132. try {
  133. request.setSignName("阿凡提信息科技");//{\"code\":\""+mobileVerifyCode+"\"}
  134. request.setTemplateCode("SMS_37845022");
  135. request.setParamString("{\"code\":\""+mobileVerifyCode+"\",\"product\":\"阿凡提信息科技\"}");
  136. request.setRecNum(mobile);
  137. SingleSendSmsResponse httpResponse = client.getAcsResponse(request);
  138. } catch (ServerException e) {
  139. //e.printStackTrace();
  140. res.getError().add(buildError(ErrorConstants.MCODE_ERROR,"获取手机验证码异常"));
  141. LoggerUtils.fmtError(getClass(), e, "服务器端手机验证码异常:%s", e.getMessage());
  142. }
  143. catch (ClientException e) {
  144. //e.printStackTrace();
  145. res.getError().add(buildError(ErrorConstants.MCODE_ERROR,"获取手机验证码异常"));
  146. LoggerUtils.fmtError(getClass(), e, "客户端手机验证码异常:%s", e.getMessage());
  147. }
  148. return res;
  149. }
  150. }