社交项目(十三)

107 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

用户注册模块开发

1.定义memberService

image.png

public interface MemberService {
    public Member createMember(String username,String password, String nickname);
}

代码说明:

  • createMember:新建用户,需要三个参数,分别是username(用户名),password(密码),nickname(用户昵称)

2.实现注册用户的方法

image.png

@Resource
private MemberMapper memberMapper;

@Override
public Member createMember(String username, String password, String nickname) {
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("username", username);
    List<Member> memberList = memberMapper.selectList(queryWrapper);
    if (memberList.size() > 0) {
        throw new BusinessException("M01", "用户已存在");
    }
    Member member = new Member();
    member.setUsername(username);
    member.setNickname(nickname);
    member.setCreateTime(new Date());
    int salt = new Random().nextInt(1000) + 1000;
    String md5 = MD5Utils.md5Digest(password, salt);
    member.setPassword(md5);
    member.setSalt((long) salt);
    memberMapper.insert(member);
    return member;
}

代码说明:

  • memberMapper.selectList(queryWrapper):查询是否有重名的用户
  • int salt = new Random().nextInt(1000) + 1000:生成4位随机数
  • String md5 = MD5Utils.md5Digest(password, salt):password加密

3.定义md5加密方法

pom文件引入加密依赖

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.14</version>
</dependency>

别忘记更新lib image.png 新增utils包 image.png

public class MD5Utils {
    public static String md5Digest(String source,Integer salt){
        char[] ca = source.toCharArray();
        for (int i = 0; i < ca.length; i++) {
            ca[i]= (char) (ca[i]+salt);
        }
        String target = new String(ca);
        String md5 = DigestUtils.md5Hex(target);
        return md5;
    }
}

4.service新增exception包,用来处理异常

image.png

package com.imooc.reader.service.exception;

public class BusinessException extends RuntimeException {
    private String code;
    private String msg;
    public BusinessException(String code,String msg){
        super(msg);
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

代码说明:

  • BusinessException extends RuntimeException:继承RuntimeException
  • public BusinessException(String code,String msg):BusinessException(业务异常)构造函数

5.控制器新增判断逻辑

image.png

try {
    memberService.createMember(username,password,nickname);
    result.put("code",0);
}catch (BusinessException e){
    e.printStackTrace();
    result.put("code",e.getCode());
    result.put("msg",e.getMsg());
}

代码说明:

  • memberService.createMember(username,password,nickname):调用createMember方法,并且传递参数
  • try {}catch(BusinessException e):捕获异常

6.重启项目

注册成功
image.png
注册失败
image.png