开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
会员登陆功能
1.控制器设置登录页面
@GetMapping("/login.html")
public ModelAndView showLogin(){
return new ModelAndView("/login");
}
2.登陆界面
代码说明:
可以看到,登录需要用户名,密码和验证码三个参数提交
3.启动项目,查看登录界面
4.MemberService新增chekLogin接口类
public Member checkLogin(String username,String password);
代码说明:
- checkLogin(String username,String password):需要两个参数,用户名和密码
5.MemberServiceImpl实现chekLogin方法
@Override
public Member checkLogin(String username, String password) {
QueryWrapper<Member> queryWrapper = new QueryWrapper<Member>();
queryWrapper.eq("username",username);
Member member = memberMapper.selectOne(queryWrapper);
if(member==null){
throw new BusinessException("M02","用户不存在");
}
String md5 = MD5Utils.md5Digest(password, Math.toIntExact(member.getSalt()));
if(!md5.equals(member.getPassword())){
throw new BusinessException("M03","密码错误");
}
return member;
}
代码说明:
- memberMapper.selectOne(queryWrapper):根据用户名查找是否存在该用户,不存在直接返回异常
- MD5Utils.md5Digest(password, Math.toIntExact(member.getSalt())):检验密码是否正确,不正确直接返回密码错误
6.控制器定义chek_login接口
@PostMapping("check_login")
@ResponseBody
public Map checkLogin(String username, String password, String vc, HttpSession session){
Map result = new HashMap<>();
String verifyCode = (String) session.getAttribute("kaptchaVerifyCode");
if(vc==null || verifyCode==null || !verifyCode.equalsIgnoreCase(vc)){
result.put("code","vc01");
result.put("msg","验证码错误");
}else {
try {
Member member = memberService.checkLogin(username,password);
session.setAttribute("loginMember",member);
result.put("code",0);
}catch (BusinessException e){
e.printStackTrace();
result.put("code",e.getCode());
result.put("msg",e.getMsg());
}
}
return result;
}
代码说明:
- String verifyCode = (String) session.getAttribute("kaptchaVerifyCode"):对验证码进行校验
- Member member = memberService.checkLogin(username,password):MemberService调用chekLogin方法,返回对象为Member
- session.setAttribute("loginMember",member):登陆成功,则设置key为loginMember的session
7.图书列表页
代码说明:
- 判断session是否存在,如果存在,则显示用户昵称
<#if loginMember??>
<h6 class="mt-1">
<img style="width: 2rem;margin-top: -5px" class="mr-1" src="./images/user_icon.png">${loginMember.nickname}
</h6>
<#else >
<a href="/login.html" class="btn btn-light btn-sm">
<img style="width: 2rem;margin-top: -5px" class="mr-1" src="./images/user_icon.png">登录
</a>
</#if>
8.重启项目
登陆成功,成功返回用户昵称