PC-202403201522\Administrator
2024-05-13 865eeb5d1b4d883ba9a70b64e4f8e3e4d271ce4d
增加邮箱校验
5 files modified
3 files added
275 ■■■■■ changed files
src/main/java/com/nq/controller/UserApiController.java 16 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/User.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserService.java 4 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserServiceImpl.java 32 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/email/CodeUtil.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/email/EmailService.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/email/EmailUtil.java 127 ●●●●● patch | view | raw | blame | history
src/main/resources/application.properties 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/UserApiController.java
@@ -57,10 +57,22 @@
    //注册
    @RequestMapping(value = {"reg.do"}, method = {RequestMethod.POST})
    @ResponseBody
    public ServerResponse reg(@RequestParam("agentCode") String agentCode, @RequestParam("phone") String phone, @RequestParam(value = "yzmCode", defaultValue = "") String yzmCode, @RequestParam("userPwd") String userPwd, HttpServletRequest httpServletRequest) {
        return this.iUserService.reg(yzmCode, agentCode, phone, userPwd, httpServletRequest);
    public ServerResponse reg(@RequestParam("agentCode") String agentCode,
                              @RequestParam("phone") String phone,
                              @RequestParam(value = "yzmCode", defaultValue = "") String yzmCode,
                              @RequestParam("userPwd") String userPwd,
                              @RequestParam("email") String email,
                              HttpServletRequest httpServletRequest) {
        return this.iUserService.reg(yzmCode, agentCode, phone, userPwd, email,httpServletRequest);
    }
    @RequestMapping(value = {"sendMailCode.do"}, method = {RequestMethod.POST})
    @ResponseBody
    public ServerResponse sendMailCode(@RequestParam("email") String email) {
        return this.iUserService.sendMailCode(email);
    }
    //登录
    @RequestMapping(value = {"login.do"}, method = {RequestMethod.POST})
    @ResponseBody
src/main/java/com/nq/pojo/User.java
@@ -38,4 +38,11 @@
    private String withdrawalPwd;
    private String vaildNumber;
    private String email;
    /**
     * ifsc
     * */
    private String ifsc;
}
src/main/java/com/nq/service/IUserService.java
@@ -8,7 +8,7 @@
import javax.servlet.http.HttpServletRequest;
public interface IUserService {
  ServerResponse reg(String paramString1, String paramString2, String paramString3, String paramString4, HttpServletRequest paramHttpServletRequest);
  ServerResponse reg(String paramString1, String paramString2, String paramString3, String paramString4,String paramString5, HttpServletRequest paramHttpServletRequest);
  ServerResponse login(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest);
@@ -90,4 +90,6 @@
  ServerResponse queryMyOption(String code, HttpServletRequest request);
  ServerResponse getMoenyLog(String type,HttpServletRequest request);
  ServerResponse sendMailCode(String toMail);
}
src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -14,6 +14,8 @@
import com.nq.pojo.reponse.RUserAssets;
import com.nq.service.*;
import com.nq.utils.UserPointUtil;
import com.nq.utils.email.CodeUtil;
import com.nq.utils.email.EmailService;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
@@ -45,8 +47,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
@Service("iUserService")
public class UserServiceImpl implements IUserService {
@@ -128,14 +132,24 @@
    @Resource
    ApplyLeverMapper applyLeverMapper;
    @Autowired
    EmailService emailService;
    @Autowired
    CodeUtil codeUtil;
    @Autowired
    private StringRedisTemplate redisTemplate;
    public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd, HttpServletRequest request) {
        if (StringUtils.isBlank(agentCode) || StringUtils.isBlank(phone) ||
                StringUtils.isBlank(userPwd) || StringUtils.isBlank(yzmCode)) {
    public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd,String email, HttpServletRequest request) {
        if (StringUtils.isAnyBlank(agentCode,phone,userPwd,yzmCode,email)) {
            return ServerResponse.createByErrorMsg("注册失败。该参数不能为空",request);
        }
        Assert.isTrue(userMapper.selectCount(new LambdaQueryWrapper<User>().eq(User::getEmail,email)) == 0,
                "Registration failed, the mobile mail number has been registered");
        String redisCode = redisTemplate.opsForValue().get(codeUtil.KEY_PREFIX + yzmCode);
        if (redisCode == null || !yzmCode.equals(redisCode)) {
            return ServerResponse.createByErrorMsg("Verification code error");
        }
        String keys = "AliyunSmsCode:" + phone;
        String redis_yzm = RedisShardedPoolUtils.get(keys);
@@ -166,7 +180,7 @@
        user.setAgentName(agentUser.getAgentName());
        user.setPhone(phone);
        user.setUserPwd(SymmetricCryptoUtil.encryptPassword(userPwd));
        user.setEmail(email);
        user.setAccountType(Integer.valueOf(0));
        user.setIsLock(Integer.valueOf(1));
@@ -1124,6 +1138,14 @@
        queryWrapper.eq("user_id",user.getId());
        return  ServerResponse.createBySuccess(mapper.selectList(queryWrapper));
    }
    @Override
    public ServerResponse sendMailCode(String MailCode) {
        if (MailCode == null || MailCode.equals("")) {
            return ServerResponse.createByErrorMsg("The mobile mail number and password cannot be empty");
        }
        emailService.sendSimpleMail(MailCode, "barclays register code", codeUtil.generateVerificationCode());
        return ServerResponse.createBySuccessMsg("send code success!");
    }
}
src/main/java/com/nq/utils/email/CodeUtil.java
New file
@@ -0,0 +1,39 @@
package com.nq.utils.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class CodeUtil {
    //存储时间
    private static final int EXPIRATION_TIME_IN_MINUTES = 3;
    //键名
    public static final String KEY_PREFIX ="yzm";
    @Autowired
    private StringRedisTemplate redisTemplate;
    public String generateVerificationCode() {
        // 生成6位随机数字验证码
        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
        String key = KEY_PREFIX+code;
        redisTemplate.opsForValue().set(key, code, EXPIRATION_TIME_IN_MINUTES, TimeUnit.MINUTES);
        return code;
    }
    // 验证验证码是否正确
    public boolean verifyCode(String userId, String code, String key) {
        key = key + userId;
        String storedCode = redisTemplate.opsForValue().get(key);
        return code.equals(storedCode);
    }
    //删除redis中验证码
    public void deleteCode(String userId, String key) {
        key = key + userId;
        redisTemplate.delete(key);
    }
}
src/main/java/com/nq/utils/email/EmailService.java
New file
@@ -0,0 +1,32 @@
package com.nq.utils.email;
public interface EmailService {
    /**
     * 发送文本邮件
     *
     * @param to      收件人
     * @param subject 主题
     * @param content 内容
     */
    void sendSimpleMail(String to, String subject, String content);
    /**
     * 发送HTML邮件
     *
     * @param to      收件人
     * @param subject 主题
     * @param content 内容
     */
    public void sendHtmlMail(String to, String subject, String content);
    /**
     * 发送带附件的邮件
     *
     * @param to       收件人
     * @param subject  主题
     * @param content  内容
     * @param filePath 附件
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath);
}
src/main/java/com/nq/utils/email/EmailUtil.java
New file
@@ -0,0 +1,127 @@
package com.nq.utils.email;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.regex.Pattern;
@Service
public class EmailUtil implements EmailService
{
    private static final Logger log = LoggerFactory.getLogger(EmailService.class);
    //Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用
    @Autowired
    private JavaMailSender mailSender;
    // 配置文件中我的谷歌邮箱
    @Value("${spring.mail.username}")
    private String from;
    /**
     * 简单文本邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        //创建SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件发送人
        message.setFrom(from);
        //邮件接收人
        message.setTo(to);
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);
        //发送邮件
        mailSender.send(message);
    }
    /**
     * html邮件
     * @param to 收件人,多个时参数形式 :"xxx@xxx.com,xxx@xxx.com,xxx@xxx.com"
     * @param subject 主题
     * @param content 内容
     */
    @Override
    public void sendHtmlMail(String to, String subject, String content) {
        //获取MimeMessage对象
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper;
        try {
            messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(from);
            //邮件接收人,设置多个收件人地址
            InternetAddress[] internetAddressTo = InternetAddress.parse(to);
            messageHelper.setTo(internetAddressTo);
            //messageHelper.setTo(to);
            //邮件主题
            message.setSubject(subject);
            //邮件内容,html格式
            messageHelper.setText(content, true);
            //发送
            mailSender.send(message);
            //日志信息
            log.info("邮件已经发送。");
        } catch (Exception e) {
            log.error("发送邮件时发生异常!", e);
        }
    }
    /**
     * 带附件的邮件
     * @param to 收件人
     * @param subject 主题
     * @param content 内容
     * @param filePath 附件
     */
    @Override
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);
            mailSender.send(message);
            //日志信息
            log.info("邮件已经发送。");
        } catch (Exception e) {
            log.error("发送邮件时发生异常!", e);
        }
    }
    /**
     * 验证邮箱格式
     * @param email
     * @return
     */
    public  boolean isEmail(String email) {
        if (email == null || email.length() < 1 || email.length() > 256) {
            return false;
        }
        Pattern pattern = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
        return pattern.matcher(email).matches();
    }
}
src/main/resources/application.properties
@@ -169,7 +169,25 @@
#?????
news.main.url=http://eminfo.eastmoney.com
spring.main.allow-circular-references=true
spring.mail.host=smtp.gmail.com
# ????????
spring.mail.port=587
# ????????????
spring.mail.username=barclays5510@gmail.com
# ????????????????????????????
spring.mail.password=nppwibbarixvbnqk
# ??TLS??
spring.mail.properties.mail.smtp.starttls.enable=true
# ??????????
spring.mail.properties.mail.smtp.auth=true
# ??????
spring.mail.properties.mail.transport.protocol=smtp
properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory