写在前面:本项目以学习为主,目的是记录学习过程。完整源代码已上传至guihub。GitHub - tianyazhang000/seckill_shop: 基于Spring Boot构建电商基础秒杀项目
项目介绍:该项目模拟了高并发场景的商城系统,主要包括用户注册登录、商品列表、商品详情、秒杀功能以及安全优化模块。解决了用户安全登录问题,用户重复下单、超卖超买、限流防刷问题。(使用redis缓存,并使用页面静态化技术将静态资源缓存在CDN中,降低服务器的压力,加快了用户的访问速度。还使用异步消息队列机制对系统的交易性能进行了优化。在秒杀接口使用计数器来防止脚本对秒杀接口的不断刷新,增强了服务器的稳定性。最后还使用验证码技术不仅起到削峰的作用,还能防止恶意刷访问。)
一、分布式Session
该模块主要是实现基本的登陆注册功能,以及如何实现分布式Session,如何进行参数校验等。
1、用户登录
通过两次MD5加密来保证用户安全,第一次实在前端进行一次加密;第二次是在后端接收到之后再次加密,与数据库中存放的密码进行校验来实现登录功能。
首先添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Springboot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>seckill_shop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>seckill_shop</name>
<description>seckill_shop</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- thymeleaf组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis-plus 依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!-- lombook-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- md5 依赖 -->
<