黑马点评Redis项目实战(1)基于Session实现短信登录

news/2024/7/16 7:53:58 标签: 学习, java, ide, spring, mysql, redis

一、导入黑马点评项目

1.后端部署

下载好资料之后,先在数据库中制作所需的表,如下:

接着在工程中按照自己的数据库设置相应的username和root,如下:

启动项目之后,输入网站:localhost:8081/shop-type/list

 如下:

使用虚拟机安装redis

安装依赖:

上传压缩包到指定文件夹:

redis默认前台启动:

redis后台启动(指定配置启动):

修改工程中有关redis的ip地址、端口号、密码等信息:

此时,后端项目部署已经完成。

2.前端部署

解压资料中的ngix压缩包,复制到一个没有中文路径的目录,启动即可。

输入网址:黑马点评

选择手机模式即可看到如下页面

二、发送短信验证码

重点思路绘制出流程图,理清思路:

java">    public Result sendCode(String phone, HttpSession session) {
        //1.校验手机号
        if (RegexUtils.isPhoneInvalid(phone)){
            //2.如果不符合,返回错误信息
            return Result.fail("手机号格式错误");
        }
        //3.符合,生成验证码
        String code = RandomUtil.randomNumbers(6);//hutool工具包生成随机6位数
        //4.保存验证码到session
        session.setAttribute("code", code);
        //5.发送验证码 //需要调用第三方平台,比如阿里云短信平台实现,实现起来比较复杂,此处假设发送成功
        log.debug("发送短信验证码成功,验证码:{}", code);
        //返回ok
        return Result.ok();
    }

三、短信验证码登录和注册

java">    @Override
    public Result login(LoginFormDTO loginForm, HttpSession session) {
        //1.再次校验手机号
        String phone = loginForm.getPhone();
        if (RegexUtils.isPhoneInvalid(phone)){
            return Result.fail("手机号格式错误");
        }
        //2.校验验证码
        Object cacheCode = session.getAttribute("code");//存在session中的验证码
        String code = loginForm.getCode();//从前端获取的验证码
        if (cacheCode == null || !cacheCode.toString().equals(code)){
            //3.不一致,报错
            return Result.fail("验证码错误");
        }
        //4.一致,根据手机号查询用户
        // query()(是ServiceImpl<UserMapper, User>中mybatis的一个方法)=select * from tb_user where phone = ?
        User user = query().eq("phone", phone).one();
        //5.判断用户是否存在
        if (user == null){
            //6.不存在:创建新用户,并保存
            user = createUserWithPhone(phone);
        }
        //7.保存用户信息到session(存在不存在都要进行这一步)
        session.setAttribute("user", user);
        return Result.ok();
    }

    private User createUserWithPhone(String phone) {
        //1.创建用户
        User user = new User();
        user.setPhone(phone);
        user.setNickName(USER_NICK_NAME_PREFIX + RandomUtil.randomString(5));
        //USER_NICK_NAME_PREFIX在SystemConstants里的常量
        //2.保存用户
        save(user);//mybatis的函数
        return user;
    }

四、登录验证功能

1.拦截器

编写拦截器(utils)==》配置拦截器生效(config)

@Configuration:表示MVC相关配置的注解

2.敏感信息泄露

User类会有敏感信息泄露的风险,所以改为UserDTO类。

此时就只能看到三个信息,没有密码等其他敏感信息了。

五、集群的session共享问题

session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。

session的代替方案应该满足:

  • 数据共享
  • 内存存储
  • key, value结构

所以引入Redis实现session登录


http://www.niftyadmin.cn/n/5358870.html

相关文章

C++/数据结构:二叉搜索树的实现与应用

目录 一、二叉搜索树简介 二、二叉搜索树的结构与实现 2.1二叉树的查找与插入 2.2二叉树的删除 2.3二叉搜索树的实现 2.3.1非递归实现 2.3.2递归实现 三、二叉搜索树的k模型和kv模型 一、二叉搜索树简介 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0…

AI的安全应答之道

作者&#xff1a;统信UOS技术团队 2023,随着各种大语言模型的爆发&#xff0c;整个AI生态正处于从决策式AI进化到生成式AI的进程中。各类AI模型和AI应用层出不穷&#xff0c;也随之带来了与AI相关的各类潜在风险。AI开发和使用过程中的风险防范和治理&#xff0c;成为了不可忽…

go语言-context的基本使用

1. 什么是 Context&#xff1f; Go 1.7 标准库引入 context&#xff0c;中文译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#x…

Windows IIS服务如何配置并制作web站点结合内网穿透实现公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

Crontab 通过命令快捷修改时间

crontab -l | sed s/56 15/50 22/g | crontab - 在 sed 命令中&#xff0c;s 和 g 是替换命令的标志&#xff0c;用于指定替换的模式和选项。 s&#xff1a;表示替换&#xff08;substitute&#xff09;命令&#xff0c;用于在文本中查找匹配的模式并进行替换。g&#xff1a;…

使用Python和ffmpeg旋转WebM视频并保存为MP4文件

简介: 在本篇博客中&#xff0c;我们将介绍如何使用Python编写一个程序&#xff0c;结合wxPython和ffmpeg模块&#xff0c;来旋转WebM视频文件并将其保存为MP4格式。我们将使用wxPython提供的文件选择对话框来选择输入和输出文件&#xff0c;并使用ffmpeg库来进行视频旋转操作。…

Java数组动态初始化与常见问题深度解析

数组是Java编程中一种非常重要的数据结构&#xff0c;它用于存储相同类型的多个元素。在实际应用中&#xff0c;我们经常需要根据实际需求动态地初始化数组。理解数组的动态初始化方法及其常见问题对于编写高质量的代码至关重要。本文将深入探讨Java中的数组动态初始化方法及常…

BGAD文章复现笔记-1

文章名&#xff1a;《Explicit Boundary Guided Semi-Push-Pull Contrastive Learning for Supervised Anomaly Detection》 原作者代码&#xff1a;https://github.com/xcyao00/BGAD 复现过程&#xff1a; 系统Ubuntu22.04, PyTorch1.12.1&#xff0c;python3.9 下载原作者…