使用SpringBoot实现邮箱注册

1.编写serviceImpl实现类。(这个类主要编写发送短信)

@Resource
    JavaMailSender mailSender;//发送邮件对象

public void sendActivationMail(String maillTo, String activationCode) {
        //activationMailMessage 邮件信息对象
        SimpleMailMessage activationMailMessage = new SimpleMailMessage();
        String key = "activation"+maillTo;//收件方邮箱
        activationMailMessage.setSubject("这是一个标题");//标题
        activationMailMessage.setFrom("[email protected]");//发送人
        //注入的简单邮件消息对象,设置收件方
        activationMailMessage.setTo(maillTo);
        //设置邮件正文
        activationMailMessage.setText("注册邮箱:"+maillTo+"  激活码:"+activationCode);
        //注入的邮件发送器,负责登录服务器,发送邮件
         mailSender.send(activationMailMessage);
        //保存邮箱账号和激活码,到redis缓存中,30分钟后过期
        redisService.set(key,activationCode,(long)30*60);
    }
    

2.编写UserService实现类
(2.1)编写实现注册方法

/**
     * 注册方法
     * @param user
     * @throws Exception
     */
    @Override
    public void itriptxCreateUser(ItripUser user) throws Exception {
        //生成邮件中的激活码,例如:一串随机的数字
        String activationCode = MD5.getMd5(new Date().toLocaleString(),32);
        //发送邮件:第一个参数是用户注册的邮箱,第二个参数是激活码
        mailService.sendActivationMail(user.getUserCode(),activationCode);
        //新增一条用户注册信息到数据库中,但是activated字段为0(表示为激活)
        itripUserMapper.insertItripUser(user);
    }

(2.2编写根据email查找user方法。因为是注册账号之后还未实现激活所以需要根据email找到user来更新激活状态)

/**
     * 根据email去查找一个user
     * @param email
     * @return
     * @throws Exception
     */
    @Override
    public ItripUser findByUserName(String email) throws Exception {
        Map<String,Object> map = new HashMap<>();
        map.put("userCode",email);
        if(itripUserMapper.findItripUserListByMap(map).size()==0){
            return null;
        }
        return itripUserMapper.findItripUserListByMap(map).get(0);
    }

(2.3 编写激活方法)

@Override
    /**
     * 根据邮箱去激活
     * code 激活码
     */
    public boolean activateByEmail(String email, String code) throws Exception {
        String key = "activation"+email;
        if(redisService.get(key).equals(code)){
            //查找该用户对象
            ItripUser user = this.findByUserName(email);
            if(EmptyUtils.isNotEmpty(user)){
                logger.debug("激活用户"+email);
                user.setActivated(1);//激活用户
                user.setUserType(0);//自注册用户
                user.setFlatID(user.getId());
                itripUserMapper.updateItripUser(user);//修改激活状态 (更新)
                return true;
            }
        }
        return false;
    }

3.编写UserController
(3.1.1注册方法主体)

//注册方法  根据email注册  dto返回的结果是一种状态
    @RequestMapping(value = "/doregister",produces = "application/json")
    @ResponseBody//返回json
    public Dto registerByEmail(@RequestBody ItripUserVO userVO){
        //判断注册的邮箱是否存在,如果不存在 返回的json是失败状态
        if(!validEmail(userVO.getUserCode()))
            return DtoUtil.returnFail("请使用正确的邮箱地址注册",ErrorCode.AUTH_ILLEGAL_USERCODE);
        try{
            //封装数据到实体
            ItripUser user = new ItripUser();
            user.setUserCode(userVO.getUserCode());
            user.setUserPassword(userVO.getUserPassword());
            user.setUserType(0);
            user.setUserName(userVO.getUserName());
            //服务器再次进行重复验证,如果邮箱未注册 则继续
            if(null == userService.findByUserName(userVO.getUserCode())){
                //生成32位字符的md5加密 密码
                user.setUserPassword(MD5.getMd5(userVO.getUserPassword(),32));
                //调用service发送邮件,保存user数据,激活码保存在redis
                userService.itriptxCreateUser(user);
                return DtoUtil.returnSuccess();
            }else{
                return DtoUtil.returnFail("用户已存在,注册失败",ErrorCode.AUTH_USER_ALREADY_EXISTS);
            }
        }catch (Exception e){
            e.printStackTrace();
            return DtoUtil.returnFail(e.getMessage(),ErrorCode.AUTH_UNKNOWN);
        }
    }

(3.1.2 email格式验证的正则表达式)

    //验证email
    public boolean validEmail(String email){
        //正则表达式email
        String regex = "^[A-Za-z0-9\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        return Pattern.compile(regex).matcher(email).find();
        //return true;
    }

(3.1.3 ItripUserVO 封装的参数)
在这里插入图片描述

(3.1.4 MD5 工具类(密码需要设置加密))
在这里插入图片描述

(3.2.1 激活方法主体 。 注册成功之后用户实现激活)

//激活方法 根据email
    @RequestMapping(value = "/activate",method = RequestMethod.PUT,produces = "application/json")
    @ResponseBody
    public Dto activateByEmail(@RequestParam String user ,@RequestParam String code){
        try{
            if(userService.activateByEmail(user,code)){
                return DtoUtil.returnSuccess("激活成功");
            }else{
                return DtoUtil.returnSuccess("激活失败");
            }
        }catch (Exception e){
            e.printStackTrace();
            return DtoUtil.returnFail("激活失败",ErrorCode.AUTH_ACTIVATE_FAILED);
        }
    }

(3.2.2 DtoUtil工具类 封装数据)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hsuan_CSDN/article/details/84190738