社交项目(十四)

130 阅读1分钟

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

会员登陆功能

1.控制器设置登录页面

image.png

@GetMapping("/login.html")
public ModelAndView showLogin(){
    return new ModelAndView("/login");
}

2.登陆界面

image.png 代码说明: 可以看到,登录需要用户名,密码和验证码三个参数提交

3.启动项目,查看登录界面

image.png

4.MemberService新增chekLogin接口类

image.png

public Member checkLogin(String username,String password);

代码说明:

  • checkLogin(String username,String password):需要两个参数,用户名和密码

5.MemberServiceImpl实现chekLogin方法

image.png

@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接口

image.png

@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.图书列表页

image.png 代码说明:

  • 判断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.重启项目

登陆成功,成功返回用户昵称 image.png