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

目录

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.实现前端逻辑,完成前后端交互

相关推荐
SeaDhdhdhdhdh2 小时前
MCP Server 搭建与使用指南
java·ai·agent·mcp
李姆斯3 小时前
为啥Agent在coding表现这么好,但是在别的领域就是差的不少?
前端·agent·ai编程
YH55269843 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
AI_小站3 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
许彰午4 小时前
03-三种开发模式
java·架构
涟漪海洋4 小时前
创建最新的JDK25镜像,非root环境启动
java
Rain的Java大神之路5 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
鱼与宇5 小时前
前端Web(html+css+js+vue3)
前端
2602_959960925 小时前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
Zane1994126 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言