登录的问题:
用户两次登录后会生成新旧两个令牌,此时旧的不应该生效
要使旧的失效:
令牌主动失效机制
登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中
LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌
当用户修改密码成功后,删除redis中存储的旧令牌
登录优化-redis SpringBoot集成redis
SpringBoot 集成 redis
1导入 spring-boot-starter-data-redis 起步依赖
2.在 yml 配置文件中,配置 redis 连接信息
3.调用 API (StringRedisTemplate) 完成字符串的存取操作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
# application.yml
spring:
data:
redis:
host: localhost
port: 6379
@Test
public void testStringSet(){
stringRedisTemplate.opsForValue().set("username","如花");
}
@Test
public void testStringGet(){
stringRedisTemplate.opsForValue().get("username");
}
写一个test
启动redis
运行test后,启动redis客户端
成功获取
不用redis客户端,在idea中获取
成功获取
存储时可以设置过期时间
存储id为1,15秒过期
登录优化-redis 主动失效机制实现
在UserController中注入redis
登录成功时把token存储到redis中并设置过期时间1小时,与令牌过期时间相同
在登录拦截器中也注入redis
验证token是否失效
更新密码时删除redis中存储的token
在更新密码的方法上传入token
更新时删除redis中存储的token
SpringBoot项目部署
项目需要部署到服务器上
开发好的项目需要打成jar包,首先需要配置打包的插件
项目打包
看弹幕提示 </properties> 里面加上<skipTests>true</skipTests>后成功打包
打包好的jar包在target目录下
把自己的电脑当作服务器,在当前文件夹运行cmd
运行
测试
注意: jar包部署,要求服务器必须有jre环境
小结:
1.如何生成 jar 包?
执行 package 命令即可
2.如何运行 jar 包?
Java -jar jar 包位置
3.Jar 包部署对服务器有什么要求?
必须有 jre 环境
SpringBoot属性配置方式
问题:
想改端口为9090,但项目已经打成jar包了,不能直接在yml配置文件中修改
解决:
方法一:命令行参数方式
--键=值 --server.port=9090
端口改为9090
方法二:环境变量方式
在用户变量新建一个server.port变量
重新启动cmd窗口环境变量才会生效
运行后端口是9090
方法三:外部配置文件方式
当前文件夹下创建yml文件
运行
端口成功改为9090
配置的优先级 从上往下依次变高
1.项目中 resources 目录下的 application.yml
2.Jar 包所在目录下的 application.yml
3.操作系统环境变量
4.命令行参数
SpringBoot多环境开发 基本使用
开发、测试、生产三种环境下配置信息是不同的
多环境开发 - Profiles
SpringBoot 提供的 Profiles 可以用来隔离应用程序配置的各个部分,并在特定环境下指定部分配置生效
如何分隔不同环境的配置?
使用三个横杠 ---
如何指定哪些配置属于哪个环境?
spring:
config:
activate:
on-profile: 环境名称
如何指定哪个环境的配置生效?
spring:
profiles:
active: 环境名称
如果 特定环境中的配置和通用信息冲突了,特定环境中的配置生效
下图中虚拟路径/bbb生效
三种环境配置文件写到同一个yml文件中会不好维护
解决:多文件配置
把不同环境的配置信息写到不同文件
在application.yml中指定激活的环境
SpringBoot多环境开发 分组
在一个环境的yml文件中配置多个配置信息也会不好维护
解决:
把不同的配置信息再分成多个yml文件
在application.yml中指定激活的分组