SpringBoot 前後端動靜分離+叢集 遇到的第一個問題:跨域session共享
關於跨域的文章 https://blog.csdn.net/freshlover/article/details/44223467
關於跨域cookie攜帶 https://blog.csdn.net/a317560315/article/details/78397369
CORS Filter文件 http://software.dzhuvinov.com/cors-filter-configuration.html
後臺服務要實現高可用,需要做相關的配置改變,其中比較重要的問題是session共享
原專案中,使用了自定義token放在Request Header中來鑑定使用者的身份
但前後端分離畢竟是使用了驗證碼,有跨域問題,還是需要cookie攜帶才能解決
但是要實現叢集,就必須實現session共享
因為專案中正好在用了Redis,所以選擇了Rdis快取 + Spring Session來實現
maven依賴
<!--redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- spring session的依賴 -->
<dependency> <groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
redis連線引數
#redis
spring.redis.host=xx.xx.xx.xx
spring.redis.port=6379
spring.redis.password=xxxx
前端ajax全域性設定xhrFields: {
withCredentials: true
}
後端SpringBootpublic class AuthApplication {
public static void main(String[] args) {
SpringApplication.run(AuthApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
//全域性支援CORS(跨源請求)
registry.addMapping("/**")
//允許任意來源
.allowedOrigins("*")
.allowedMethods("PUT", "DELETE","OPTIONS", "GET", "POST")
.allowedHeaders("*")
.exposedHeaders("access-control-allow-headers",
"access-control-allow-methods",
"access-control-allow-origin",
"access-control-max-age",
"X-Frame-Options")
.allowCredentials(CrossOrigin.DEFAULT_ALLOW_CREDENTIALS)//允許Cookie跨域
.maxAge(3600);
}
};
}
}
此時,可以傳送自定義的cookie資訊了,但是沒看到session被傳送到伺服器,
此時的情況時:
Response Headers
Set-Cookie:SESSION=4bbd2abd-4aa0-42d9-a8f4-d6b212a83b7e;path=/;Secure;HttpOnly
注意到了這後面的HttpOnly 不太明白其中的意思 查詢如下文章中
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie
Secure 可選
一個帶有安全屬性的 cookie 只有在請求使用SSL和HTTPS協議的時候才會被髮送到伺服器。然而,保密或敏感資訊永遠不要在 HTTP cookie 中儲存或傳輸,因為整個機制從本質上來說都是不安全的,比如前述協議並不意味著所有的資訊都是經過加密的。
注意:非安全站點(http:)已經不能再在 cookie 中設定 secure 指令了(在Chrome 52+ and Firefox 52+ 中新引入的限制)。
HttpOnly 可選
設定了 HttpOnly 屬性的 cookie 不能使用 JavaScript 經由 Document.cookie 屬性、XMLHttpRequest 和 Request APIs 進行訪問,以防範跨站指令碼攻擊(XSS)。
一開始嘗試關閉掉這兩個配置,但似乎沒起作用,可能我引數用錯了
等於要使用Https協議,由於測試的時候一直是使用http。。。哎!
因為專案早就使用了阿里雲證照,開啟了Https,所以此處略過
更換成Https協議後,每次傳送的cookie中終於看到攜帶了session了(本地cookie中也看到了儲存的session)
相關文章
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- 前後端分離解決session跨域丟失問題後端Session跨域
- Vue+SpringBoot前後端分離中的跨域問題VueSpring Boot後端跨域
- 前後端分離解決跨域問題後端跨域
- springboot使用Filter解決前後端分離,產生的跨域問題Spring BootFilter後端跨域
- 解決 Laravel 5.8 前後端分離跨域問題Laravel後端跨域
- SpringBoot解決前後端跨域問題Spring Boot後端跨域
- SpringBoot 配置CORS處理前後端分離跨域配置無效問題解析Spring BootCORS後端跨域
- 前後端分離專案,如何解決跨域問題?後端跨域
- cookie跨域共享 cookie二級域名共享 前後端分離專案共享cookieCookie跨域後端
- 前後端分離下的跨域CAS請求後端跨域
- Spring Boot前後端分離專案Session問題解決Spring Boot後端Session
- 淺談前後端分離中的跨資源共享(CORS)後端CORS
- SpringBoot 2.0 SpringSession 支援跨域session問題Spring BootGseSession跨域
- SpringBoot+Vue前後端分離及互動Spring BootVue後端
- 超簡單的前端跨域、前後端分離解決方案前端跨域後端
- vue前後端分離解決每次請求session都會變的問題Vue後端Session
- 前後端頁面分離導致session無法正常獲取的問題後端Session
- java 後端 控制跨域問題Java後端跨域
- springboot 跨域問題Spring Boot跨域
- LiveNode.js 超簡單的前端跨域、前後端分離解決方案Node.js前端跨域後端
- SpringBoot+Vue前後端分離系統搭建Spring BootVue後端
- SpringBoot,Vue前後端分離開發首秀Spring BootVue後端
- 無需CORS,用nginx解決跨域問題,輕鬆實現低程式碼開發的前後端分離CORSNginx跨域後端
- 關於 vue Laravel5.5 前後段分離式開發介面跨域問題請教VueLaravel跨域
- Vue,Springboot前後端分離專案初體驗VueSpring Boot後端
- NodeJS+Express遇到的跨域問題NodeJSExpress跨域
- ???前後端分離模式的思考???後端模式
- SpringBoot + Angular前後端分離專案部署(更新)實錄Spring BootAngular後端
- 前後端分離那些事後端
- 再談前後端分離後端
- 淺談前後端分離後端
- 前後端分離——使用OSS後端
- 前後端分離整合SpringSecurity後端SpringGse
- SpringBoot 2.6.7 處理跨域的問題Spring Boot跨域
- SpringBoot 2.7.0 處理跨域的問題Spring Boot跨域
- 前後分離實現中,後臺 Laravel 接收資料的跨域解決方案Laravel跨域
- 前後端分離的優缺點後端