JavaWeb學習打卡-Day4-會話技術、JWT、Filter、Interceptor

會話技術

  • 會話:用戶打開瀏覽器,訪問web服務器的資源,會話建立,直到有一方斷開連接,會話結束。在一次會話中可以包含多次請求和響應。
  • 會話跟蹤:一種維護瀏覽器狀態的方法,服務器需要識別多次請求是否來自于同一瀏覽器,以便在同一次會話的多次請求間共享數據。
會話跟蹤方案:
  • 客戶端會話跟蹤技術:Cookie
    • 優點:是HTTP協議中支持的技術,是官方提供的。
    • 缺點:
      • 移動端APP無法使用Cookie。
      • 不安全,用戶可以自己禁用Cookie。
      • Cookie不能跨域。
  • 服務端會話跟蹤技術:Session
    • 優點:存儲在服務端,安全
    • 缺點:
      • 服務器集群環境下無法直接使用Session。
      • Cookie的缺點。
  • 令牌技術
    • 優點:
      • 支持PC端、移動端。
      • 解決集群環境下的認證問題。
      • 減輕服務器端存儲壓力。
    • 缺點:需要自己實現。

JWT

JWT簡介
  • 全稱:JSON Web Token
  • 定義了一種簡潔的、自包含的格式,用于在通信雙方以json數據格式安全的傳輸信息。由于數字簽名的存在,這些信息是可靠的。
  • 組成:
    • Header(頭):記錄令牌類型簽名算法等。采用Base64編碼。例如:{“alg”:“HS256”,“type”:“JWT”}
    • Payload(有效載荷):攜帶一些自定義信息默認信息等。采用Base64編碼。例如:{“id”:“1”,“username”:“Tom”}
    • Signature(簽名):通過指定的簽名算法,將header、payload,再加入指定秘鑰計算而來。防止Token被篡改,確保安全性。
JWT場景:登錄認證
  • 令牌生成:登錄成功后,生成JWT令牌,并返回給前端。
  • 令牌校驗:后續每個請求,都要攜帶JWT令牌。在請求到達服務端后,對令牌進行統一攔截、校驗。JWT校驗時使用的簽名秘鑰,必須和生成JWT令牌時使用的秘鑰是配套的,如果JWT令牌解析校驗時報錯,則說明JWT令牌被篡改或失效了,即令牌非法

過濾器(Filter)

介紹
  • Filter 過濾器,是 JavaWeb 三大組件(Servlet、Filter、Listener)之一
  • 過濾器可以把對資源的請求攔截下來,從而實現一些特殊的功能。
  • 過濾器一般完成一些通用的操作,比如:登錄校驗、統一編碼處理、敏感字符處理等。
入門
  • 定義Filter:定義一個類,實現 Filter接口,并重寫其所有方法。
  • 配置Filter:Filter類上加 @Webfilter 注解,配置攔截資源的路徑。引導類(啟動類)上加 @ServletComponentScan 開啟Servlet組件支持。
    @WebFilter(urlPatterns = "/*")
    public class DemoFilter implements Filter{public void init(FilterConfig filterConfig) throws ServletException {//初始化方法,Web服務器啟動,創建Flter時調用,只調用一次。Filter.super.init(filterConfig);}public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain){//攔截到請求時,調用該方法,可調用多次System.out.println("攔截方法執行,攔截到了請求..");chain.dofilter(request,response);}public void destroy(){//銷毀方法,服務器關閉時調用,只調用一次Filter.super.destroy();}
    }
    
Filter攔截路徑
攔截路徑urlPatterns值含義
具體路徑/login只有訪問 /login 路徑時,才會被攔截
目錄攔截/emps/*訪問/emps下的所有資源,都會被攔截
攔截所有/*訪問所有資源,都會被攔截
過濾器鏈
  • 一個web應用中,可以配置多個過濾器,這多個過濾器就形成了一個過濾器鏈
  • 注解配置的Filter,優先級是按照過濾器類名(字符串)的自然排序。
    過濾器鏈執行流程

攔截器(interceptor)

介紹
  • 是一種動態攔截方法調用的機制,類似于過濾器。
  • Spring框架中提供的,用來動態攔截控制器方法的執行。
  • 用來攔截請求,在指定的方法調用前后,根據業務需要執行預先設定的代碼。
入門
  • 定義攔截器,實現HandlerInterceptor接口,并重寫其所有方法。
    @Component
    public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目標資源方法執行前執行,返回true:放行,返回false:不放行。public boolean preHandle (HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {System.out.println("preHandle ...");return true;}@Override //目標資源方法執行后執行public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView modelAndView){System.out.println("postHandle ...");}@Override //視圖渲染完畢后執行,最后執行public void afterCompletion (HttpServletRequest req, HttpServletResponse resp, Object handler, Exception ex){System.out.println("afterCompletion ...");}
    }
    
  • 注冊攔截器
    @Configuration
    public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(loginCheckInterceptor).addPathPatterns ("/**");}
    }
    
攔截路徑

攔截器攔截路徑

執行流程

執行流程

Filter與Interceptor
  • 接口規范不同:過濾器需要實現Filter接口,而攔截器需要實現HandlerInterceptor接口。
  • 攔截范圍不同:Filter會攔截所有的資源,而Interceptor只會攔截Spring環境中的資源

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

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

相關文章

讓數據優雅落地:用 serde::Deserialize 玩轉結構體實體

前言 想象一下,服務器突然飛來一堆 JSON 數據,就像一群無頭蒼蠅沖進辦公室,嗡嗡作響,橫沖直撞。此刻,你的任務,就是把這群“迷路數據”安置進正確的格子里,分門別類,秩序井然,不混不亂,不漏一只。 好在 Rust 早就為我們備好瑞士軍刀:serde::Deserialize。它不僅刀…

Virtio 技術解析 | 框架、設備實現與實踐指南

本文為 “Virtio” 相關文章合輯。 略作重排,如有內容異常,請看原文。 Virtio 簡介(一)—— 框架分析 posted 2021-04-21 10:14 Edver 1. 概述 在傳統設備模擬中,虛擬機內部設備驅動完全不知自身處于虛擬化環境&a…

云計算賦能質檢LIMS的價值 質檢LIMS系統在云計算企業的創新應用

在云計算技術高速發展的背景下,實驗室信息化管理正經歷深刻變革。質檢LIMS(實驗室信息管理系統)作為實驗室數字化轉型的核心工具,通過與云計算深度融合,為企業提供了高彈性、高安全性的解決方案。本文將探討質檢LIMS在…

【win11 安裝WSL2 詳解一遍過!!】

共有五個步驟,按部就班的做,保準成功! 1. 打開開發者模式 設置->系統->開發者模式 2. 打開linux的win子系統 找到控制面板-程序和功能-啟用或關閉Windows功能,選中“適用于Linux的Windows子系統”,“虛擬機…

Godot開發2D冒險游戲——第三節:游戲地圖繪制

一、初步構建游戲地圖 在游戲場景當中添加一個新的子節點:TileMapLayer 這一層稱為瓦片地圖層 根據提示,下一步顯然是添加資源 為TileMapLayer節點添加一個TileSet 將地板添加進來,然后選擇自動分割圖集 自定義時要確保大小合適 讓Godot自…

Django創建的應用目錄詳細解釋以及如何操作數據庫自動創建表

創建好Django項目后 如果要創建 python manage.py startapp 模塊名模塊 使用 我創建一個system模塊后是 注意:urls是我自己建的文件 1.migrations目錄 存放數據庫的遷移文件,當models.py中模型定義發生變化時,通過遷移操作能同步數據庫結構變化 __init__ 使該目錄…

將輸入幀上下文打包到下一個幀的預測模型中用于視頻生成

Paper Title: Packing Input Frame Context in Next-Frame Prediction Models for Video Generation 論文發布于2025年4月17日 Abstract部分 在這篇論文中,FramePack是一種新提出的網絡結構,旨在解決視頻生成中的兩個主要問題:遺忘和漂移。 具體來說,遺忘指的是在生成視…

STM32 串口USART

目錄 常見的通信方式 串行通信和并行通信 全雙工,半雙工和單工通信 同步通信和異步通信 通信速率 常見的通信協議 串口基礎知識 電平特性 串口傳輸協議 STM32F103的USART資源 端口引腳 數據寄存器單元 發送接收控制單元 實現串口發送 printf…

Taro on Harmony :助力業務高效開發純血鴻蒙應用

背景 純血鴻蒙逐漸成為全球第三大操作系統,業界也掀起了適配鴻蒙原生的浪潮,用戶遷移趨勢明顯,京東作為國民應用,為鴻蒙用戶提供完整的購物體驗至關重要。   去年 9 月,京東 AP…

gem5-gpu教程05 內存建模

memory-modeling|Details on how memory is modeled in gem5-gpu gem5-gpu’s Memory Simulation gem5-gpu在很大程度上避開了GPGPU-Sim的單獨功能模擬,而是使用了gem5的執行中執行模型。因此,當執行存儲/加載時,內存會被更新/讀取。沒有單獨的功能路徑。(順便說一句,這…

【python】lambda用法(結合例子理解)

目錄 lambda 是什么? 為什么叫 lambda? 語法 舉例 1. 最簡單的 lambda:單個數字處理 2. 用 lambda 排序一組字符串(按照長度排序) 3. 在列表里找出絕對值最小的數字 4. 給 map() 用 lambda 5. 組合使用:篩選出偶數 lambda 和 def 的對比 lambda 適合用在什么地…

【ROS2】機器人操作系統安裝到Ubuntu22.04簡介(手動)

主要參考: https://book.guyuehome.com/ROS2/1.系統架構/1.3_ROS2安裝方法/ 官方文檔:https://docs.ros.org/en/humble/Installation.html 虛擬機與ubuntu系統安裝 略,見參考文檔 ubutun換國內源,略 1. 設置本地語言 確保您有…

C 調用 C++:extern “C” 接口詳解與實踐 C/C++混合編譯

C 調用 C:extern “C” 接口詳解與實踐 核心問題在于 C 編譯器會對函數名進行“修飾”(Name Mangling)以支持函數重載等特性,而 C 編譯器則不會。此外,C 語言本身沒有類、對象等概念。為了解決這個問題,我…

汽車制造行業如何在數字化轉型中抓住機遇?

近年來,隨著新一輪科技革命和產業變革的深入推進,汽車制造行業正迎來一場前所未有的數字化轉型浪潮。無論是傳統車企還是新勢力品牌,都在積極探索如何通過數字化技術提升競爭力、開拓新市場。那么,在這場變革中,汽車制…

k8s學習記錄(五):Pod親和性詳解

一、前言 上一篇文章初步探討了 Kubernetes 的節點親和性,了解到它在 Pod 調度上比傳統方式更靈活高效。今天我們繼續討論親和性同時Kubernetes 的調度機制。 二、Pod親和性 上一篇文章中我們介紹了節點親和性,今天我們講解一下Pod親和性。首先我們先看…

HarmonyOS:Navigation實現導航之頁面設置和路由操作

導讀 設置標題欄模式設置菜單欄設置工具欄路由操作頁面跳轉頁面返回頁面替換頁面刪除移動頁面參數獲取路由攔截 子頁面頁面顯示類型頁面生命周期頁面監聽和查詢 頁面轉場關閉轉場自定義轉場共享元素轉場 跨包動態路由系統路由表自定義路由表 示例代碼 Navigation組件適用于模塊…

雪花算法

目錄 一、什么是雪花算法 二、使用雪花算法 ?三、使用UUID 使用自增主鍵是數據庫中常用的唯一標識,今天嘗試使用mybatisplus來實現三種方式的主鍵ID 使用起來也很簡單 用注解指定一下使用那種方式的主鍵 一、什么是雪花算法 一種特殊的算法可以計算得到一個唯…

HarmonyOs @hadss/hmrouter路由接入

參考文檔:官方文檔 在根目錄oh-package.json5配置 {"dependencies": {"hadss/hmrouter": "^1.0.0-rc.11"} }加入路由編譯插件 hvigor/hvigor-config.json文件 {"dependencies": {"hadss/hmrouter-plugin": &…

C++學習筆記(三十八)——STL之修改算法

STL 算法分類: 類別常見算法作用排序sort、stable_sort、partial_sort、nth_element等排序搜索find、find_if、count、count_if、binary_search等查找元素修改copy、replace、replace_if、swap、fill等修改容器內容刪除remove、remove_if、unique等刪除元素歸約for…

Crawl4AI 部署安裝及 n8n 調用,實現自動化工作流(保證好使)

Crawl4AI 部署安裝及 n8n 調用,實現自動化工作流(保證好使) 簡介 Crawl4AI 的介紹 一、Crawl4AI 的核心功能 二、Crawl4AI vs Firecrawl Crawl4AI 的本地部署 一、前期準備 二、部署步驟 1、檢查系統的網絡環境 2、下載 Crawl4AI 源…