篇章八 论坛系统——业务开发——登录

目录

1.登录

[1.1 顺序图](#1.1 顺序图)

[1.2 参数要求](#1.2 参数要求)

[1.3 接口规范](#1.3 接口规范)

[1.4 实现流程](#1.4 实现流程)

1.编写SQL

2.dao层接口

3.定义Service接口

4.实现Service接口

5.单元测试

[6. Controller实现方法对外提供API接口](#6. Controller实现方法对外提供API接口)

7.测试API接口

8.实现前端逻辑,完成前后端交互

​编辑


1.登录

1.1 顺序图

1.2 参数要求

1.3 接口规范

1.4 实现流程

1.编写SQL

2.dao层接口

3.定义Service接口

复制代码
/**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return 用户信息
     */
    User selectByUserName(String username);

    /**
     * 处理用户登录
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    User login(String username,String password);

4.实现Service接口

复制代码
 /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    @Override
    public User selectByUserName(String username) {
        // 1.非空校验
        if(StringUtils.isEmpty(username)) {
            // 打印日志
            log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_PARAMS_VALIDATE));
        }

        // 返回查询结果
        return userMapper.selectByUserName(username);
    }

    /**
     * 处理用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    @Override
    public User login(String username, String password) {
        // 1.非空校验
        if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
            // 打印日志
            log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 2.按用户名查询用户信息
        User user = selectByUserName(username);
        // 3.对查询结果进行非空校验
        if (user == null) {
            // 打印日志
            log.warn(ResultCode.FAILED_LOGIN.toString() + ", username = " + username);
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 4.对密码校验
        String encryptPassword = MD5Util.md5Salt(password, user.getSalt());
        // 5.用密文和数据库中存的用户密码进行比较
        if(!encryptPassword.equals(user.getPassword())) {
            // 打印日志
            log.warn(ResultCode.FAILED_LOGIN.toString() + ", 密码错误, username = " + username);
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 打印登录成功的日志
        log.info("[UserServiceImpl.login()]: " + username + " 登录成功");
        return user;
    }

5.单元测试

复制代码
  @Test
    void selectByUserName() {
        System.out.println(userService.selectByUserName("boy"));
    }

    @Test
    void login() {
        System.out.println(userService.login("wj", "123456"));
    }

6. Controller实现方法对外提供API接口

7.测试API接口

8.实现前端逻辑,完成前后端交互

相关推荐
_Evan_Yao5 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd5 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼5 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
小poop5 小时前
CSS 基础与实战:从入门到精通网页美化
前端
thefool1122666 小时前
TCP 1
java·1024程序员节
Csvn7 小时前
运行时性能
前端
Never_every998 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck8 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
空中湖9 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架