二、用户登录
1 登录-持久层
1.规划SQL语句
用户选择在持久层查询,密码比较放在业务层
select * from t_user where username=#{
username}
2 登录-业务层
2.1异常规划
-
规划可能出现的异常
- 密码错误:PasswordNotMatchException
- 用户名不存在:UsernameNotFoundException
-
异常的编写:继承ServiceException
2.2设计业务层接口和抽象方法
-
在IUserService接口直接编写抽象方法,login(String username,String password)。
将当前登录成功的用户数据以当前用户对象的形式进行返回。
状态管理:可以将数据保存在cookie和session中,
可以避免重复度很高的数据频繁操作数据进行获取(用户名,用户id放在session;头像放在cookie中)
-
在实现类中实现父接口的抽象方法
@Override public User login(String username, String password) { User byUsername = userMapper.findByUsername(username); //判断用户是否存在 if (byUsername == null){ throw new UsernameNotFoundException("用户不存在"); } //判断密码是否正确 //获取旧密码 String oldPassword = byUsername.getPassword(); //获取盐值 String salt = byUsername.getSalt(); //对前端传来的密码进行加密 String md5Password = getMD5Password(password,salt); if (!oldPassword.equals(md5Password)){ throw new PasswordNotMatchException("密码错误"); } //判断用户是否被删除 Integer isDelete = byUsername.getIsDelete(); if (isDelete == 1){ throw new UsernameNotFoundException("用户数据不存在"); } //性能优化 User user = new User(); user.setUsername(byUsername.getUsername()); user.setUid(byUsername.getUid()); user.setAvatar(byUsername.getAvatar()); return user;

本文详细介绍了在SpringBoot项目中实现用户登录功能的步骤,包括持久层的SQL设计、业务层异常规划、控制层的异常处理和前端页面的构建。同时,讨论了用户登录会话session的管理,并探讨了如何自定义拦截器,实现对请求的过滤,确保只有登录用户才能访问特定资源。
最低0.47元/天 解锁文章
3414

被折叠的 条评论
为什么被折叠?



