登錄的問題:
用戶兩次登錄后會生成新舊兩個令牌,此時舊的不應該生效
要使舊的失效:
令牌主動失效機制
登錄成功后,給瀏覽器響應令牌的同時,把該令牌存儲到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中指定激活的分組