package com.hxzkappboot.controller; import com.hxzkappboot.pojo.TbUser; import com.hxzkappboot.service.UserService; //import com.hxzkappboot.util.JwtUitls; import com.hxzkappboot.util.JwtUtils; import com.hxzkappboot.util.R; import com.hxzkappboot.util.StatusCode; import com.hxzkappboot.util.WechatLoginRequestDTO; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile; import com.tencentcloudapi.sms.v20210111.SmsClient; import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.Objects; import static java.lang.Integer.parseInt; @RestController public class LoginController { private String SecretId = "AKIDrjZOI4e6KLZu9FAsSRN8eOwSt52lbMBz"; private String SecretKey = "xnRtHUL3YqdMyOLVSBjKkz1pQoxujS4d"; @Autowired UserService userService; @PostMapping("/api/wx/login") public R login(@Valid @RequestBody WechatLoginRequestDTO loginRequest ) { // System.out.println("收到微信code:" + loginRequest.getCode()); R response ; try { TbUser tbUser = new TbUser(); tbUser.setPassword(loginRequest.getPassword()); tbUser.setUsername(loginRequest.getUsername()); tbUser.setCid(loginRequest.getCid()); TbUser tbUser1 = userService.login(tbUser); if (tbUser1!=null){ if (Objects.equals(tbUser1.getYanzheng(), "5")){ response = new R(StatusCode.Fail); response.setCode(-1); response.setMsg("当前登录失败次数已达上限,请联系管理员解锁!"); }else{ String token= JwtUtils.createToken(String.valueOf(tbUser1.getUsername()),5*24*60*60*1000);//生成token返回前端 response = new R(StatusCode.Success); tbUser1.setToken(token); tbUser1.setTokentype("Bearer"); response.setData(tbUser1); } }else{ response = new R(StatusCode.Fail); response.setCode(-1); response.setMsg("用户名密码有误,请重试"); TbUser tbUser2 = userService.findPhoneUser(loginRequest.getUsername()); if (tbUser2!=null ){ Integer i=0; if (Objects.equals(tbUser2.getYanzheng(), "NaN") || Objects.equals(tbUser2.getYanzheng(), "") || tbUser2.getYanzheng()==null){ i=1; }else if (tbUser2.getYanzheng().equals("5")){ i=5; response.setMsg("当前登录失败次数已达上限,请联系管理员解锁!"); }else{ i = parseInt(tbUser2.getYanzheng())+1; } tbUser2.setYanzheng(i.toString()); userService.upUserJiaYanZheng(tbUser2); } } } catch (Exception e) { response = new R(StatusCode.Fail.getCode(), e.getMessage()); } return response; } @GetMapping("/api/wx/checkLogin") public R checkLogin( String token) { System.out.println("收到待校验token:" + token); R response ; try { token = token.substring(7); R r=JwtUtils.checkToken(token); if (r.getCode()==0){ response = new R(StatusCode.Success); }else{ response = new R(StatusCode.Fail.getCode(),r.getMsg()); } } catch (Exception e) { response = new R(StatusCode.Fail.getCode(), e.getMessage()); } return response; } @PostMapping("/api/wx/getUserCid") public R getUserCid( @Valid @RequestBody WechatLoginRequestDTO loginRequest) { // System.out.println("收到待校验token:" + token); R response ; try { TbUser tbUser = new TbUser(); tbUser.setPassword(loginRequest.getPassword()); tbUser.setUsername(loginRequest.getUsername()); tbUser.setCid(loginRequest.getCid()); TbUser tbUser1 = userService.getUserCid(tbUser); if (tbUser1!=null){ if (!Objects.equals(tbUser1.getCid(), loginRequest.getCid())) { response = new R(StatusCode.Fail.getCode(),"当前账号已在其他设备登录,当前设备将强制退出!"); }else{ response = new R(StatusCode.Success); response.setData(tbUser1); } }else{ response = new R(StatusCode.Fail.getCode(),"当前账号已删除,请注册账号后重新的登录"); } } catch (Exception e) { response = new R(StatusCode.Fail.getCode(), e.getMessage()); } return response; } @GetMapping("upUserJiaYanZheng") public int upUserJiaYanZheng(TbUser user){ return userService.upUserJiaYanZheng(user); } @GetMapping("/api/wx/sms") public int sms(String phone, int randomNumber) throws TencentCloudSDKException { try { System.out.println("生成的随机整数是:" + randomNumber); // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential(SecretId, SecretKey); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("sms.tencentcloudapi.com"); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 SendSmsRequest req = new SendSmsRequest(); String[] phoneNumberSet1 = {phone}; req.setPhoneNumberSet(phoneNumberSet1); req.setSmsSdkAppId("1400838975"); req.setSignName("北京华星北斗智控"); req.setTemplateId("1878379"); String[] templateParamSet1 = {String.valueOf(randomNumber)}; req.setTemplateParamSet(templateParamSet1); // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSms(req); // 输出json格式的字符串回包 System.out.println(SendSmsResponse.toJsonString(resp)); } catch (TencentCloudSDKException e) { System.out.println(e.toString()); } return randomNumber; } }