项目使用方案:
前端:
后端:SpringBoot、Mybatis
中间件:RabbitMQ、Redis、Druid
环境:Linux CentOS
工具:IDEA开发、Navicate数据库管理
远程连接工具:MobaXterm
数据库:MySql
压力测试工具:Jmeter
远程登录工具MobaXterm 可直接利用工具编写命令,传输文件
打开软件,在Remote host输入IP地址
在服务器上部署Redis 注意改redis.conf配置:
(1)允许所有IP访问
(2)允许后台访问
(3)设置stop-write为no
否则会出现以下问题:
ResponseError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案。
通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。
不过需要先将之前启动的redis进程kill掉,然后再重新启动新的redis,才能避免报相同的错
查看进程:ps -ef|grep redis
然后kill掉对应的进程:kill -9 pid
对应此处:kill -9 23789
参考安装教程:Redis安装及部署(windos、Linux) 使用Linux教程安装
SpringBoot集成Redis 参考SpringBoot整合Redis依赖导入及配置
在服务器上部署RabbitMQ 参考安装教程:RabbitMQ安装及集群搭建
RabbitMQ更新到3.8以后安装过程都与网上介绍有所不同,此处介绍3.8.11的新版安装过程
登陆使用两次MD5校验
用户端:Pass = MD5(明文 + 固定的salt)
服务端:Pass = MD5(明文 + 随机的salt)
导入MD5依赖
1 2 3 4 5 6 7 8 9 <dependency > <groupId > commons-codec</groupId > <artifactId > commons-codec</artifactId > </dependency > <dependency > <groupId > org.apache.commons</groupId > <artifactId > commons-lang3</artifactId > <version > 3.7</version > </dependency >
前端(将用户的密码进行MD5转换)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function doLogin ( ) { g_showLoading(); var inputPass = $("#password" ).val(); var salt = g_passsword_salt; var str = "" +salt.charAt(0 )+salt.charAt(2 ) + inputPass +salt.charAt(5 ) + salt.charAt(4 ); var password = md5(str); $.ajax({ url: "/login/do_login" , type: "POST" , data:{ mobile:$("#mobile" ).val(), password: password }, }
后端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 import org.apache.commons.codec.digest.DigestUtils;public class MD5Util { public static String md5 (String src) { return DigestUtils.md5Hex(src); } private static final String salt = "1a2b3c4d" ; public static String inputPassToFormPass (String inputPass) { String str = "" +salt.charAt(0 )+salt.charAt(2 )+inputPass+salt.charAt(5 )+salt.charAt(4 ); return md5(str); } public static String formPassToDbPass (String formPass, String salt) { String str = "" +salt.charAt(0 )+salt.charAt(2 )+formPass+salt.charAt(5 )+salt.charAt(4 ); return md5(str); } public static String inputPassToDbPass (String input, String saltDB) { String formPass = inputPassToFormPass(input); String dbPass = formPassToDbPass(formPass, saltDB); return dbPass; } public static void main (String[] args) { System.out.println(inputPassToFormPass("123456" )); System.out.println(formPassToDbPass(inputPassToFormPass("123456" ), "1a2b3c4d" )); System.out.println(inputPassToDbPass("123456" , "1a2b3c4d" )); } }
具体登陆流程
JSR303参数校验 为简化参数校验引入JSR303参数校验的依赖
1 2 3 4 5 <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-validation</artifactId > </dependency >
SpingBoot已经集成JSR303数据校验 ,可直接使用
或者引入Hibernate Validator 依赖
1 2 3 4 5 <dependency > <groupId > org.glassfish</groupId > <artifactId > jakarta.el</artifactId > <version > 4.0.0</version > </dependency >
1、在需要验证的类上加@Validated
2、去实体类中在需要验证的参数加具体验证内容
SpringBoot2.0 是基于 spring 5.0 实现的。
在Spring 5.0 中,已经将 WebMvcConfigurerAdapter 抽象类加上 @Deprecated 注解 已经被弃用。
过时方法:
1 2 3 4 5 6 7 8 9 10 @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Autowired UserArgumentResolver userArgumentResolver; @Override public void addArgumentResolvers (List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(userArgumentResolver); }
WebMvcConfigurerAdapter 抽象类实现了 WebMvcConfigurer 接口,这里我们只需要将 extends WebMvcConfigurerAdapter 替换为 implements WebMvcConfigurer 即可。代码如下:
1 2 3 4 5 6 7 8 9 10 @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired UserArgumentResolver userArgumentResolver; @Override public void addArgumentResolvers (List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(userArgumentResolver); } }
数据库设计
goods
miaosha_goods
miaosha_order
miaosha_user
order_info
复制数据库导入Linux
1 2 3 4 5 6 7 8 9 10 # 启动数据库 mysql -u root -p# 新建一个同名的空数据库 create database miaosha;# 使用此数据库 use miaosha;# 导入数据库 source /home/lwj/myproject/miaosha.sql;# 查看数据库中的表 show tables;