02-Springboot电脑网上商城项目-用户登录功能

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二、用户登录

1 登录-持久层

1.规划SQL语句

​ 用户选择在持久层查询,密码比较放在业务层

select * from t_user where username=#{
   
   username}

2 登录-业务层

2.1异常规划
  1. 规划可能出现的异常

    • 密码错误:PasswordNotMatchException
    • 用户名不存在:UsernameNotFoundException
  2. 异常的编写:继承ServiceException

2.2设计业务层接口和抽象方法
  1. 在IUserService接口直接编写抽象方法,login(String username,String password)。

    将当前登录成功的用户数据以当前用户对象的形式进行返回。

    状态管理:可以将数据保存在cookie和session中,

    可以避免重复度很高的数据频繁操作数据进行获取(用户名,用户id放在session;头像放在cookie中)

  2. 在实现类中实现父接口的抽象方法

     @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;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值