xinyb
2023-04-17 072acddef4f0d69f0cc645b8b9106874855ae18f
提交 | 用户 | age
a6a76f 1 package com.yc.phoneQRLogin.action;
F 2
3 import java.io.IOException;
4 import java.util.Properties;
5 import java.util.concurrent.TimeUnit;
6 import javax.mail.BodyPart;
7 import javax.mail.Message;
8 import javax.mail.Multipart;
9 import javax.mail.Session;
10 import javax.mail.Transport;
11 import javax.mail.internet.InternetAddress;
12 import javax.mail.internet.MimeBodyPart;
13 import javax.mail.internet.MimeMessage;
14 import javax.mail.internet.MimeMultipart;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
072acd 17
X 18 import com.yc.service.panel.DiBangIfc;
19 import org.apache.commons.lang.StringUtils;
a6a76f 20 import org.springframework.beans.factory.annotation.Autowired;
F 21 import org.springframework.beans.factory.annotation.Qualifier;
22 import org.springframework.data.redis.core.RedisTemplate;
23 import org.springframework.stereotype.Controller;
24 import org.springframework.web.bind.annotation.RequestMapping;
25 import com.yc.action.BaseAction;
26 import com.yc.duanxin.Sms;
27 import com.yc.duanxin.SmsParm;
28 import com.yc.multiData.SpObserver;
29 import com.yc.sdk.shopping.action.api.GenerationQrCodeForApp;
30 import com.yc.sdk.shopping.entity.QrCodeForAppEntity;
31 import com.yc.sdk.shopping.service.imagedata.ShoppingImageDataIfc;
32
33 /**
34  * 用来执行手机、Email验证码
35  * 
36  * @author xinyb_
37  *
38  */
39 @Controller
40 public class verification extends BaseAction {
41
42     @Autowired
43     @Qualifier("redisTemplate")
44     RedisTemplate redisTemplate;
45     @Autowired
46     ShoppingImageDataIfc imgData;
47
48     /**
49      * 手机发送6位随机验证码 xin 2020-5-19 16:17:17
50      * 
51      * @param dbId
52      * @param telephone
53      * @param request
54      * @param response
55      * @throws IOException
56      */
57     @SuppressWarnings("unchecked")
58     @RequestMapping("/ws/phoneCode.do")
59     public void phoneCode(String dbId, String telephone, int type, HttpServletRequest request,
60             HttpServletResponse response) throws IOException {
61         try {
072acd 62             if(StringUtils.isBlank(telephone)){
X 63                 throw new Exception("手机号不能为空");
64             }
65             String isRepeat= (String) redisTemplate.opsForValue().get("repeat:" + telephone + ":" + dbId);
66             if(StringUtils.isNotBlank(isRepeat)){//存在表示在一分钟内还没有过期,不能再次发送短信 xin 2023-4-17 09:57:02
67                 throw new Exception("在一分钟内,请不要重复发送");
68             }
69             redisTemplate.opsForValue().set("repeat:" + telephone + ":" + dbId, telephone, 1, TimeUnit.MINUTES);// 1分钟后失效
a6a76f 70             int code = getRandom();
F 71             String text = "";
72             switch (type) {
73             case 1:
74                 text = "您的验证码是" + code + ",您正在使用登录功能。该验证码仅用于身份验证,请勿泄露给他人使用。";
75                 break;
76             case 2:
77                 text = "您的验证码是" + code + ",您正在更改系统手机号。该验证码仅用于身份验证,请勿泄露给他人使用。";
78                 break;
79             case 3:
80                 text = "您的验证码是" + code + ",您正在绑定该手机号。该验证码仅用于身份验证,请勿泄露给他人使用。";
81                 break;
82             case 4:
83                 text = "您的验证码是" + code + ",您正在进行找回密码操作。该验证码仅用于身份验证,请勿泄露给他人使用。";
84                 break;
85             case 5:
86                 text = "您的验证码是" + code + ",您正在进行解绑操作。该验证码仅用于身份验证,请勿泄露给他人使用。";
87                 break;
88             default:
89                 text = "您的验证码是" + code + ",该验证码仅用于身份验证,请勿泄露给他人使用。";
90                 break;
91             }
92             Sms sms = new Sms();
93             SmsParm smsParm = new SmsParm();
94             sms.setKey(smsParm.getKey());
95             sms.setUid(smsParm.getUid());
96             String res = sms.sendSMS(telephone, text);
97             if ("1".equals(res)) {
98                 redisTemplate.opsForValue().set("CODE:" + telephone + ":" + dbId, code, 10, TimeUnit.MINUTES);// 10分钟后失效
072acd 99                 this.printJson(response, "{\"code\":0,\"info\":\"手机验证已发送\"}");
a6a76f 100             } else {
072acd 101                 this.printJson(response, "{\"code\":-1,\"info\":\"手机验证发送失败,返回集:" + res + "\"}");
a6a76f 102             }
F 103         } catch (Exception e) {
072acd 104             this.printJson(response, "{\"code\":-1,\"info\":\""+ (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()) + "\"}");
a6a76f 105         }
F 106     }
107
108     /**
109      * 邮箱发送6位随机验证码 xin 2020-5-19 16:17:17
110      * 
111      * @param dbId
112      * @param email
113      * @param request
114      * @param response
115      */
116     @SuppressWarnings("unchecked")
117     @RequestMapping("/emailCode.do")
118     public void verifyEmail(String dbId, String email, HttpServletRequest request, HttpServletResponse response) {
119         Properties props = new Properties();
120         props.setProperty("mail.smtp.host", "smtp.qq.com");// 设置邮件服务器主机名
121         props.put("mail.smtp.host", "smtp.qq.com");
122         props.put("mail.smtp.auth", "true");// 发送服务器需要身份验证
123         Session session = Session.getDefaultInstance(props);// 设置环境信息
124         session.setDebug(true);
125         MimeMessage message = new MimeMessage(session);
126         Multipart multipart = null;
127         BodyPart contentPart = null;
128         Transport transport = null;
129         try {
130             int code = getRandom();
131             message.setFrom(new InternetAddress("2486080222@qq.com"));// 设置发件人
132             message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
133             message.setSubject("巴士软件邮箱验证码");
134             multipart = new MimeMultipart();// 设置附件
135             contentPart = new MimeBodyPart();
136             contentPart.setContent("你的巴士软件邮箱验证码是:" + code + ",该验证码仅用于身份验证,请勿泄露给他人使用。", "text/html;charset=utf-8");
137             multipart.addBodyPart(contentPart);
138             message.setContent(multipart);
139             message.saveChanges();
140             transport = session.getTransport("smtp");
141             transport.connect("smtp.qq.com", "2486080222@qq.com", "tbshhnlrjexqecid");
142             transport.sendMessage(message, message.getAllRecipients());
143
144             redisTemplate.opsForValue().set("CODE:" + email + ":" + dbId, code, 10, TimeUnit.MINUTES);
145             this.printJson(response, "{\"info\":\"验证码发送成功\"}");
146         } catch (Exception e) {
147             this.printJson(response, "验证码发送失败:" + e.getMessage());
148         }
149     }
150
151     /**
152      * 验证码匹配是否正确 xin 2020-5-19 16:17:17
153      * 
154      * @param code
155      * @param telephone
156      * @param dbId
157      * @param request
158      * @param response
159      * @throws IOException
160      */
161     @SuppressWarnings("unchecked")
162     @RequestMapping("/ws/getIsCode.do")
163     public void getIsCode(String code, String v, String dbId, HttpServletRequest request, HttpServletResponse response)
164             throws IOException {
165         try {
166             if ("".equals(code)) {
167                 this.printJson(response, "{\"info\":\"请输入正确的验证码。\"}");
168                 return;
169             }
170             if (!redisTemplate.hasKey("CODE:" + v + ":" + dbId)) {
171                 this.printJson(response, "{\"info\":\"验证码已失效,请重新获取验证码。\"}");
172                 return;
173             }
174             String rediscode = redisTemplate.opsForValue().get("CODE:" + v + ":" + dbId) + "";
175             if (!code.equals(rediscode)) {// 验证码匹配
176                 this.printJson(response, "{\"info\":\"验证码错误,请输入正确的验证码。\"}");
177                 return;
178             }
179             redisTemplate.delete("CODE:" + v + ":" + dbId);// 删除
180             this.printJson(response, "{\"info\":1}");
181         } catch (Exception e) {
182             this.printJson(response, "{\"info\":\"验证过程出现错误:"
183                     + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()) + "\"}");
184         }
185     }
186
187     // 生成二维码图片
188     @SuppressWarnings("unchecked")
9eb57f 189 //    @RequestMapping("/ws/qrCode.do")
X 190 //    public void getQeCode(String appId, HttpServletRequest request, HttpServletResponse response) throws Exception {
191 //        try {
192 //            SpObserver.setDBtoInstance("_" + appId);
193 //            QrCodeForAppEntity qrCodeForAppEntity = new QrCodeForAppEntity();
194 //            qrCodeForAppEntity.setAction(QrCodeForAppEntity.Login); // 设置行为 Action
195 //            qrCodeForAppEntity.setAuthorCode("SYSTEM");
196 //            qrCodeForAppEntity.setAuthorName("系统管理员");
197 //            qrCodeForAppEntity = GenerationQrCodeForApp.saveQrCodeForApp(qrCodeForAppEntity, false);
198 //            String url = imgData.getImageUrl(qrCodeForAppEntity.getQrCodeUnid(), 250, 250, true, false, request);
199 //            // 写入一个key到redis,并且设置过期时间为60s
200 //            redisTemplate.opsForValue().set(qrCodeForAppEntity.getQrCode(), qrCodeForAppEntity.getQrCode(), 10,
201 //                    TimeUnit.SECONDS);
202 //            redisTemplate.opsForValue().set("STATE" + qrCodeForAppEntity.getQrCode(), 0);// 二维码当前状态
203 //            redisTemplate.opsForValue().set("DBID" + qrCodeForAppEntity.getQrCode(), appId);// 二维码当前数据源ID
204 //            this.print(response, "{\"qrcode\":\"" + qrCodeForAppEntity.getQrCode() + "\",\"url\":\"" + url + "\"}");
205 //        } catch (Exception e) {
206 //            this.print(response, e.getCause() != null ? (e.getCause().getMessage()).trim() : e.getMessage());
207 //        } finally {
208 //            SpObserver.setDBtoInstance();
209 //        }
210 //    }
a6a76f 211
F 212     /**
213      * 生成随机6位数
214      * 
215      * @return
216      */
217     private int getRandom() {
218         return (int) ((Math.random() * 9 + 1) * 100000);
219     }
220 }