基于Spring+SpringMVC+MyBatis开发书评网用户注册与登录功能实现 + MD5处理用户密码 + 业务逻辑异常类
Posted 被雨遗忘的夏天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Spring+SpringMVC+MyBatis开发书评网用户注册与登录功能实现 + MD5处理用户密码 + 业务逻辑异常类相关的知识,希望对你有一定的参考价值。
目录
概要
讲述用户注册与登录功能实现 + MD5处理用户密码 + 业务逻辑异常类的实现
一、 注册
1.1 Controller层的用户注册逻辑
@PostMapping("/registe")
@ResponseBody
public Map registe(String vc, String username, String password, String nickname, HttpServletRequest request) {
// 1、 验证码校验
// 获取前端用户输入的验证码字符
String verifyCode = (String) request.getSession().getAttribute("kaptchaVerifyCode");
// 验证码对比
Map result = new HashMap();
// vc.equalsIgnoreCase() 忽略大小写
if (vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)) {
result.put("code", "VC01");
result.put("msg", "验证码错误");
} else {
// 2、 验证码校验成功后,跳转到Service层处理
try {
memberService.createMember(username, password, nickname);
result.put("code", "0");
result.put("msg", "success");
} catch (BussinessException ex) {
// 打印堆栈
ex.printStackTrace();
result.put("code", ex.getCode());
result.put("msg", ex.getMsg());
}
}
return result;
}
1.2 业务逻辑异常
package com.imooc.reader.service.exception;
/**
* @className: BussinessException
* @author: 李绍宇
* @description: 业务逻辑异常
* @date: 2021/7/24 10:46
* @version: 1.0
*/
public class BussinessException extends RuntimeException{
private String code;
private String msg;
public BussinessException(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;
}
}
1.3 Service层的逻辑处理
/**
* 会员注册,创建新会员
* @param username 用户名
* @param password 密码
* @param nickname 昵称
* @return 新会员对象
*/
public Member createMember(String username, String password, String nickname) {
QueryWrapper<Member> queryWrapper = new QueryWrapper<Member>();
queryWrapper.eq("username", username);
List<Member> memberList = memberMapper.selectList(queryWrapper);
// 1、 判断用户名是否已存在
if(memberList.size() > 0){
throw new BussinessException("M01","用户名已存在");
}
// 2、 不存在则保存新用户
Member member = new Member();
member.setUsername(username);
member.setNickname(nickname);
// 3、 密码处理
// 产生盐值 (1000-1999)
int salt = new Random().nextInt(1000) + 1000;
// MD5摘要处理
String md5 = MD5Utils.md5Digest(password, salt);
// 保存加密后的密码、盐值和创建时间
member.setPassword(md5);
member.setSalt(salt);
member.setCreateTime(new Date());
memberMapper.insert(member);
return member;
}
1.4 MD5摘要处理用户密码
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;
}
}
二、 登录
2.1 Controller层的用户登录逻辑
@PostMapping("/check_login")
@ResponseBody
// 原生对象:HttpSession session
public Map checkLogin(String username, String password, String vc , HttpSession session){
// 1、 验证码校验
String verifyCode = (String)session.getAttribute("kaptchaVerifyCode");
// 验证码对比
Map result = new HashMap();
if(vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)){
result.put("code", "VC01");
result.put("msg", "验证码错误");
}else{
try {
// 2、 登录校验
Member member = memberService.checkLogin(username, password);
// 登录校验成功后,保存用户数据到Session,用于成功后首页右上角展示
session.setAttribute("loginMember" , member);
result.put("code", "0");
result.put("msg", "success");
}catch (BussinessException ex){
ex.printStackTrace();
result.put("code", ex.getCode());
result.put("msg", ex.getMsg());
}
}
return result;
}
2.2 Service层的逻辑处理
/**
* 登录检查
*
* @param username 用户名
* @param password 密码
* @return 登录对象
*/
public Member checkLogin(String username, String password) {
QueryWrapper<Member> queryWrapper = new QueryWrapper<Member>();
queryWrapper.eq("username", username);
// 1、 用户名校验
// selectOne()查询用户名,全局唯一
Member member = memberMapper.selectOne(queryWrapper);
if(member == null){
throw new BussinessException("M02", "用户不存在");
}
// 2、 密码校验
String md5 = MD5Utils.md5Digest(password, member.getSalt());
if(!md5.equals(member.getPassword())){
throw new BussinessException("M03", "输入密码有误");
}
return member;
}
以上是关于基于Spring+SpringMVC+MyBatis开发书评网用户注册与登录功能实现 + MD5处理用户密码 + 业务逻辑异常类的主要内容,如果未能解决你的问题,请参考以下文章
抽奖活动啦!5本SpringMVC+MyBatis相关3本Android Studio相关6本Kafka相关