java環境安裝包出現覆蓋,請查收

正文

先問小伙伴們一個問題,登錄難嗎?“登錄有什么難得?輸入用戶名和密碼,后臺檢索出來,校驗一下不就行了。”凡是這樣回答的小伙伴,你明顯就是產品思維,登錄看似簡單,用戶名和密碼,后臺校驗一下,完事了。但是,登錄這個過程涵蓋的知識點是非常多的,絕不是檢索數據,校驗一下這么簡單的事。

那么登錄都要哪些實現方式呢?i最傳統的就要是Cookie-Session這種方式了,最早的登錄方式都是這樣實現的。但是隨著手機端、H5端的興起,前后端分離的模式越來越流行,基于Cookie-Session這種登錄方式不是很方便,漸漸的JTW開始流行,現在大部分項目的登錄方式都是基于JWT的了。那么Cookie和JWT都是怎樣實現登錄的呢?這兩種方式有什么區別呢?我們在做登錄的x時候該怎么選擇呢?咱們先看看這兩種方式的原理。

Cookie方式

因為Http協議是無狀態的,我們后臺的服務(如Tomcat)在接收到前端發送過來的Http請求時,是區分不出哪個請求是誰發出的,這和我們的登錄功能是相違背的,登錄的功能就是要區分每一個請求是由哪個用戶發出的,這就變成了有狀態,那怎么辦呢?Cookie應運而生,Cookie是存儲在瀏覽器端的,在Cookie中存儲的內容是鍵值對,也就是name-value。瀏覽器在向后臺發送請求的時候,會把Cookie放在請求頭中,傳送給后臺的服務,后臺的服務會從請求頭中取到Cookie,再從Cookie中取出鍵值對中jsessionid對應的值。這個jsessionid的值就是你這次會話的id,對應著服務端的一個session。

好了,到這里session這個概念出來了,session是什么呢?session是存儲在服務端的,每一個會話對應服務中的一個session。咱們可以把session理解為一個Map,它的key存儲的session的id,value存儲的東西就隨便了,我們在寫程序時想存啥就存啥。它的key存儲的值就是Cookie中存儲的jsessionid的值,這樣,瀏覽器發送請求到后臺服務,后臺才能根據Cookie中的jsessionid取到對應的session,再從session中取到之前存儲的狀態,如存儲在session中的登錄狀態、用戶id等。Cookie-Session機制是通用的,所有的瀏覽器都支持Cookie,就連最低端的IE都支持,你說他普遍不普遍。Session是后端容器必須支持的,如Tomcat,還有像其他的如Resin、jetty等。這些對開發人員都是透明的,無需過多關注。

Cookie-Session的由來給大家說完了,我們看看基于Cookie這種方式的登錄流程,

  • 用戶在瀏覽器輸入用戶名、密碼,點擊登錄,發送請求到后臺服務;
  • 后臺服務校驗用戶名、密碼,將登錄狀態狀態和用戶id存儲在session中;
  • 將session的id存儲在Cookie中,通過響應頭返回到瀏覽器;
  • 當用戶點擊其他功能時,向后臺發送的請求中會自動帶上Cookie;
  • 后臺通過Cookie中的jsessionid找到對應的session,開發人員可從session中取出當前會話的登錄狀態和用戶id。

基于Cookie-Session機制的登錄實現方式的整體流程就是這個樣子。看上去很完美,但還是存在不少問題的,我們來看看這些問題。

分布式會話

上面的示例,我們的后臺服務只有一個,一個服務往往很難支撐服務,為了保障可靠性,最少都是部署兩個后臺服務。但是當部署多個后臺服務時,我們的session就會出現問題,看看下面的圖,

  • 假如用戶登錄的請求,分配到了后臺服務1,后臺服務1的session存了用戶的登錄狀態和用戶id。
  • 用戶在點擊其他功能時,請求分配到了后臺服務2,可是后臺服務2的session并沒有存儲登錄狀態和用戶id。

我們怎么解決這個問題呢?其實也很簡單,第一,session集中管理,比如使用Redis;第二,所有的后臺服務在獲取session時,統一從Redis中獲取。如下所示,

我們可以使用中間件Spring-Session和Redis就可以解決這個問題。

CORS

使用Cookie實現登錄的另外一個問題就是跨域,現在往往都采用前后端分離的方式進行開發,在開發的過程中,前端和后端通常不在一個域下,由于瀏覽器的同源策略,Cookie不能傳入到后端。至于同源策略,不明白的小伙伴可以問一下度娘,這里不過多介紹了。要解決這個問題,在前端、后端都要進行設置,在我的另一篇文章《前后端分離|關于登錄狀態那些事》中有詳細的介紹。總體歸納為:

  • 后端設置CORS允許跨域的域名,并且withCredentials設置為true;
  • 前端在向后端發送請求時,也需要設置withCredentials = true;

這樣,我們的Cookie就可以實現跨域了。不進行這些設置,Cookie跨域是不可能的,同源策略保證了我們Cookie的安全。

CSRF

CSRF,這個CORS是不一樣的,長的比較像,也比較容易混。CSRF往往和系統的安全扯上聯系,也是等保測試中比較重要的測試內容,它也是和Cookie有關的,大體的流程是這樣的,

  • 用戶登錄了A網站,并沒有退出;
  • 此時,用戶又訪問了B網站;
  • 在B網站有個隱藏的請求,請求了A網站的一個重要的接口,比如:轉賬、支付等。
  • 在請求A網站的同時,帶上了A網站的Cookie,所以一些危險的操作就成功了。

關于CSRF的攻防,在我前面的文章《CSRF的原理與防御 | 你想不想來一次CSRF攻擊?》中有詳細的介紹。總之,使用Cookie實現登錄是需要重點防范一下CSRF攻擊的。

JWT方式

近年來,由于手機端的興起,前后端分離開發方式的流行,JWT這種登錄的實現方式悄然興起,那么什么是JWT呢?JWT是英文JSON Web Token的縮寫,它由3部分組成,

  • header,一般情況下存儲兩個信息,1類型,一般都是JWT;2加密算法,比如:HMAC、RSA等;
  • payload,這里就存儲登錄的相關信息了,比如:登錄狀態、用戶id、過期時間等。
  • signature,簽名,這個是將header、payload和密鑰的信息做一次加密,后臺在接收到JWT的時候,一定要驗簽,謹防JWT的偽造。

下面咱們看看JWT的登錄實現,

我們看到整體的流程和Cookie的實現方式是一樣的,只不過是沒有用到Cookie、Session。那么它與Cookie-Session的區別是什么呢?

  • 登錄狀態、用戶id并沒有存儲到session,而是存在JWT的payload里,返回給了前端。
  • 在前端JWT不會自動存儲到Cookie中,前端開發人員要處理JWT的存儲問題,比如LocalStorage
  • 再次發起請求,JWT不會自動放到請求頭中,需前端同學手動設置
  • 后端從請求頭中取出JWT,驗簽通過后,拿到登錄狀態、用戶id,不是從session中取

相比Cookie的方式,JWT的方式需要更多的開發工作量。那么其他的問題存在嗎?我們一個一個看。

分布式會話

我們后臺部署多個服務,會有分布式會話的問題嗎?

無論請求被分配到哪一個后臺服務中,登錄狀態和用戶id都是從JWT中取出來的,不會出現分布式會話的問題。我們在后臺部署集群的時候,根本不用care這個問題。

CORS

Cookie的跨域受到同源策略的保護,不經過特殊的設置,是不能夠跨域的。那么JWT呢?JWT是前端同學手動在請求頭中設置的,如果向其他的域發送請求要注意,稍不注意,在請求的時候,調用了封裝的公共方法,就會把JWT發送給其他域的后臺,前端的小伙伴要打起精神啊。

CSRF

Cookie的方式,B訪問A網站,會把A的Cookie帶上,從而造成了安全隱患。那么JWT呢?JWT在前端存儲在A網站的域下,B在訪問A網站時,是拿不到A網站的JWT的,那么也不可能在請求頭中設置JWT,A網站的后臺拿不到JWT,也不會做其他操作。所以,JWT可以很好的防止CSRF攻擊。

總結

以上是字節二面的一些問題,面完之后其實挺后悔的,沒有提前把各個知識點都復習到位。現在重新好好復習手上的面試大全資料(含JAVA、MySQL、算法、Redis、JVM、架構、中間件、RabbitMQ、設計模式、Spring等),現在起閉關修煉半個月,爭取早日上岸!!!!

下面給大家分享下我的面試大全資料,如果你也有需要,可以戳這里即可免費領取我的這份復習資料

  • 第一份是我的后端JAVA面試大全

image.png

后端JAVA面試大全

  • 第二份是MySQL+Redis學習筆記+算法+JVM+JAVA核心知識整理

字節二面拜倒在“數據庫”腳下,閉關修煉半個月,我還有機會嗎?

MySQL+Redis學習筆記算法+JVM+JAVA核心知識整理

  • 第三份是Spring全家桶資料

字節二面拜倒在“數據庫”腳下,閉關修煉半個月,我還有機會嗎?

-1624780529823)]

MySQL+Redis學習筆記算法+JVM+JAVA核心知識整理

  • 第三份是Spring全家桶資料

[外鏈圖片轉存中…(img-5sdrvACu-1624780529824)]

MySQL+Redis學習筆記算法+JVM+JAVA核心知識整理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java生成json字符串,威力加強版

策略 1——停止挖掘 Law of Holes 是說當自己進洞就應該停止挖掘。對于單體式應用不可管理時這是最佳建議。換句話說,應該停止讓單體式應用繼續變大,也就是說當開發新功能時不應該為舊單體應用添加新代碼,最佳方法應該是將新功能開發成獨立微…

MATLAB小波軟硬閾值去噪代碼,matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數...

內容:matlab編程小波變換進行圖像去噪處理,包括各種軟硬閾值的選取函數,%小波閾值去噪clear allclc;fimread(graylena.bmp);fdouble(f);ssize(f);rimnoise2(gaussian,s(1),s(2),0,20);%填加高斯白噪聲fnoisyfr;%對圖像進行三層小波分解[c,s]w…

java生成二維碼讀取二維碼,面試真題解析

拼多多一面 首先自我介紹 參加過哪些項目 并發編程三要素? 實現可見性的方法有哪些? 多線程的價值? 創建線程的三種方式的對比? 畫出線程的狀態流轉圖 常用的并發工具類有哪些? CyclicBarrier 和 CountDownLatch 的區…

iis 7.5 php 防止跨站,iis安全---防范XSS跨站式腳本攻擊

iis安全---防范XSS跨站式腳本攻擊網站要怎么防范常見的XSS跨站式腳本攻擊呢,我們先從XSS跨站式腳本攻擊的原理來說起。網站遭受XSS跨站式腳本攻擊的基本原理1.本地利用漏洞,這種漏洞存在于頁面中客戶端腳本自身。其攻擊過程如下所示:A給B發送…

Java春招實習面試經驗匯總,面試篇

Part1 SpringIOC 學習Spring最重要的無非是Spring IOC以及Spring AOP,首先咱們把Spring IOC吃透,以下內容將截圖展示。 Spring IOC主要學習內容分為以下7點: ①Spring框架 ②Spring lOC容器Bean對象實例化模擬實現 ③Spring IOC容器Bean對象…

Java最新大廠面試真題總結,瞬間高大上了!

什么是分布式鎖?在回答這個問題之前,我們先回答一下什么是鎖。 普通的鎖,即在單機多線程環境下,當多個線程需要訪問同一個變量或代碼片段時,被訪問的變量或代碼片段叫做臨界區域,我們需要控制線程一個一個…

php列表框怎么用,PHP+Mysql+jQuery查詢和列表框選擇操作實例講解

這篇文章主要介紹了PHPMysqljQuery查詢和列表框選擇操作實現過程,需要的朋友可以參考下本文講解如何通過ajax查詢mysql數據,并將返回的數據顯示在待選列表中,再通過選擇最終將選項加入到已選區,可以用在許多后臺管理系統中。本文列…

Java未來路在何方?圖文詳解!

Spring Security觀后感——手繪思維腦(供參考) Spring Security手繪思維腦圖 手繪的思維導圖,是我自己根據自身的情況讀完這套阿里出品的Spring Security王者晉級文檔之后所繪的,相當于是一個知識的總結與梳理,我將其分為***“核心組件”與“…

matlab怎讓3d旋轉,如何在MATLAB中平滑旋轉3D繪圖?

我會說這是你正在繪制的大量積分導致經濟放緩.一個選項是縮減采樣..也可以使用較低級別的功能進行繪制(檢查this related post以獲得plot3 / scatter3 / line性能的比較).考慮以下針對速度優化的動畫:[X Y Z] sphere(64);X X(:); Y Y(:); Z Z(:);%# set-up figu…

Java未來路在何方?挑戰大廠重燃激情!

字節跳動一面: 自我介紹,主要講講做了什么和擅長什么看你項目做Spring比較多, 問一下Spring相關的東西, IoC是什么概念?Bean的默認作用范圍是什么?其他的作用范圍?索引是什么概念有什么作用? MySQL里主要有哪些索弓|結構?哈希索弓和B樹索引比較?平常用線程主…

php如何修改文件名,php修改文件名的實現方法_后端開發

c是什么意思_后端開發C是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。php修改文件名的實現方法在php中可以使用rename函數修改文…

Java架構師必備框架技能核心筆記,工作感悟

01 kafka入門 1.1 什么是kafka 1.2 kafka中的基本概念 1.2.1 消息和批次 1.2.2 主題和分區 1.2.3 生產者和消費者、偏移量、消費者群組 1.2.4 Broker和集群 1.2.5 保留消息 02 為什么選擇kafka 2.1 優點 2.2 常見場景 2.2.1 活動跟蹤 2.2.2 傳遞消息 2.2.3 收集指標和日志 2.2.…

java將某個數按比例分配應用題,按比例分配應用題

按比例分配(一)1、甲乙兩數的和是72,甲乙兩數的比是4:5,甲、乙兩數各是多少?。2、一個等腰三角形,頂角和一個底角的比是1:4,這個三角形兩個底角各是多少。3、六(1)班有女生24人,女生和男生人數的比是4:5&am…

Java架構師必備框架技能核心筆記,附相關架構及資料

技術焦慮 現在的技術圈子很火熱,任何技術點,任何知識,只要你肯搜索,都能找到資料。但是現在技術圈確實有一個不好的地方,就是販賣焦慮。這種販賣焦慮的點并不在于形式,而是一種普遍的心態。特別是對于那種…

php智能裁剪黑邊,圖片裁剪去除黑邊

前言從瀏覽器保存的圖片有透明度,但是python打開其透明通道是黑色的,因此我利用python的OpenCV模塊去除了其上下左右的黑邊。效果展示計算機中效果python打開效果python裁剪后效果代碼import cv2def change_size(read_file):image cv2.imread(read_file…

Java架構師教你如何突破瓶頸,持續更新中

1、上下文切換 上下文定義 cpu發生進程或者線程切換時,所依賴的數據集合,比如一個函數有外部變量,函數運行時,必須獲取外部變量,這些變量值的集合就是上下文。 引發問題 對于CPU密集型任務,多線程處理會…

matlab dwt 多層分解,利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送...

利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送mip版 關注:96 答案:2 懸賞:0解決時間 2021-01-23 13:02已解決2021-01-23 04:23(Haar小波、Daubechies小波、Coiflets小波和Symlets小波) 三層分解下的去噪圖可以直接發信息15836900853 立馬上線…

Java校招面試經驗匯總,最終入職阿里

一面 自我介紹項目中的監控:那個監控指標常見的有哪些?微服務涉及到的技術以及需要注意的問題有哪些?注冊中心你了解了哪些?consul 的可靠性你了解嗎?consul 的機制你有沒有具體深入過?有沒有和其他的注冊…

matlab確定位置,Hurlin 的PSTR模型包,怎樣確定位置參數個數

http://www.runmycode.org/companion/view/2564我用的是這個包1.怎樣確定位置參數個數?2. 門限變量也是解釋變量時,結果中(結果如下)的warning 是什么意思?3. 這個包中是否能夠把門限變量也作為解釋變量?我跑出的結果是這樣的&…

Java校招面試經驗匯總,看完直接跪服

美團技術一面20分鐘 晚7點,因為想到下周一才面試,我剛準備出去打個羽毛球,北京的電話就來了。面試官各種抱歉,說開會拖延了。 1、自我介紹 說了很多遍了,很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…