1.controller
import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*;
@Api(tags = "用户") @Slf4j @RestController @RequestMapping("/sysUser") public class SysUserController { @Autowired ISysUserService userService; @ApiOperation("注册") @RequestMapping(value = "/register", method = RequestMethod.POST) @ResponseBody public ResponseData register(@Validated @RequestBody UserLoginParam param){ int count = userService.register(param); if(count == 1){ return ResponseData.success("注册成功!"); }else if (count == 0){ return ResponseData.failure("输入的用户名或密码不能为空!"); }else if(count == -1){ return ResponseData.failure("用户名已经存在!"); } return ResponseData.failure("注册失败!"); } @ApiOperation(value = "登录") @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public ResponseData login(@Validated @RequestBody UserLoginParam loginParam) { SysUser login = userService.login(loginParam.getUserName(), loginParam.getPassword()); return ResponseData.success(login); } }
2.service
import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 用户表 服务类 */ public interface ISysUserService extends IService<SysUser> { int register(UserLoginParam param); SysUser login(String userName, String passWord); }
3.impl
import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.chint.util.Asserts; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import java.util.Date; import java.util.UUID;
@Service//("sysUserService") public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService { @Autowired SysUserMapper userMapper; @Override public int register(UserLoginParam param) { SysUser user = new SysUser(); BeanUtils.copyProperties(param, user); String userName = user.getUserName(); String password = user.getPassword(); if(userName == null || password == null){ return 0;//"输入的用户名或密码不能为空!"; } QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_name",userName); SysUser sysUser = userMapper.selectOne(queryWrapper); if(sysUser != null){ return -1;//用户名已经存在 } String salt = UUID.randomUUID().toString().toUpperCase(); String md5Password = getMd5(user.getPassword(), salt); user.setUserName(userName); user.setPassword(md5Password); user.setSalt(salt); user.setCreateTime(new Date()); int insert = userMapper.insert(user); return 1; } @Override public SysUser login(String userName, String passWord) { if(StrUtil.isEmpty(userName)||StrUtil.isEmpty(passWord)){ Asserts.fail("用户名或密码不能为空!"); } QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_name",userName); SysUser sysUser = userMapper.selectOne(queryWrapper); if(sysUser==null){ Asserts.fail("找不到用户信息!"); } String salt = sysUser.getSalt(); String md5passWord = getMd5(passWord, salt); if(!md5passWord.equals(sysUser.getPassword())){ Asserts.fail("密码不正确!"); } SysUser sUser = new SysUser(); sUser.setId(sysUser.getId()); sUser.setUserName(sysUser.getUserName()); return sUser; } //md5加密规则 private String getMd5(String password,String salt){ for (int i = 0; i <3 ; i++) { password = DigestUtils.md5DigestAsHex((salt + password +salt).getBytes()).toUpperCase(); } return password; } }
4.mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SysUserMapper extends BaseMapper<SysUser> { }
5.mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.chint.mapper.SysUserMapper"> </mapper>
6.UserLoginParam类
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import java.io.Serializable; @ApiModel("登录对象") @Data public class UserLoginParam implements Serializable { @ApiModelProperty("用户名") @NotBlank(message = "用户名不能为空") private String userName; /** * 前端Base64后密码 */ @ApiModelProperty("密码") @NotBlank(message = "密码不能为空") private String password; }
SysUser对象对应的表
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.Date; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; @Getter @Setter @TableName("sys_user") @ApiModel(value = "SysUser对象", description = "用户表") public class SysUser implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主键id") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("用户名") private String userName; @ApiModelProperty("密码") private String password; @ApiModelProperty("盐值") private String salt; @ApiModelProperty("创建时间") private Date createTime; @ApiModelProperty("修改时间") private Date updateTime; }
7.断言处理类
/** * 断言处理类,用于抛出各种API异常 * Created by macro on 2020/2/27. */ public class Asserts { public static void fail(String message) { throw new ApiException(message); } public static void fail(IErrorCode errorCode) { throw new ApiException(errorCode); } }
/** * 封装API的错误码 * Created by macro on 2019/4/19. */ public interface IErrorCode { long getCode(); String getMessage(); }