@[TOC](spring security基本知識)##
spring security學習過程
文章目錄
- 前言
- 一、spring security的核心類或接口
-
- SecurityContextHolder:
- Authentication:
- UserDetailsService:
- UserDetails:
- GrantedAuthority:
- 二、spring security主要過濾器(按順序)
-
- SecurityContextPersistenceFilter(無法被覆寫)
- UsernamePasswordAuthenticationFilter
- BasicAuthenticationFilter
- ExceptionTranslationFilter(無法被覆寫)
- AbstractSecurityInterceptor(無法被覆寫)
- 總結
前言
記錄一下自己大二暑假的學習内容
一、spring security的核心類或接口
SecurityContextHolder:
存儲安全資訊,使用localThread是以是線程安全,
Authentication:
SecurityContextHolder所存儲安全資訊的執行個體,可以在程式的任意一部分擷取到該類執行個體,通常的使用實作類為UsernamePasswordAuthenticationToken,可以使用以下代碼獲Authentication執行個體
UserDetailsService:
向系統提供UserDeatils,隻提供UserDeatil資訊而不進行驗證,驗證過程有AuthenticationManager進行,可實作AuthenticationManager來自定義驗證過程,可以使用UserServiceImpl類來實作該接口
UserDetails:
通過UserDetailsService提供必要的資訊,用于建構Authentication對象,可以讓User實體類來實作該接口,也可以使用類似代碼建立實體類
User.builder()
.username(username)
.password(password)
.authorities(authorities)
.build();
GrantedAuthority:
授予到主體的權限,通常使用的實作類為SimpleGrantedAuthority,通常将role實體name屬性作為作為權限字元串,可以類用類似代碼建立GrantedAuthority集合的簡單實作
roles.stream()
.map(Role::getName)
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
二、spring security主要過濾器(按順序)
使用java代碼的配置可以使用以下幾種政策來添加自己的過濾器
http
//添加在某個過濾器前
.addFilterBefore(MyFilter, ExceptionTranslationFilter.class)
//添加在某個過濾器所在位置,如果是自定義的過濾器繼承自spring security已有的過濾器
//通常使用這個方法
.addFilterAt(MyFilter, UsernamePasswordAuthenticationFilter.class)
//添加在某個過濾器後
.addFilterAfter(MyFilter, BasicAuthenticationFilter.class)
SecurityContextPersistenceFilter(無法被覆寫)
将每一個請求的上下文儲存在SecurityContextHolder,并在會話結束後清理SecurityContextHolder。如果使用的session也會負責儲存session資訊
UsernamePasswordAuthenticationFilter
基于表單登入會使用該過濾器進行認證過程,開啟表單登入後的登入請求會被該過濾器攔截,不處理具體的認證過程,認證過程将委托AuthenticationManager去進行,實作基于jwt的登入認證可以讓自定義的過濾器繼承該類
BasicAuthenticationFilter
官方文檔的描述是負責處理http請求頭部中的認證,因為token資訊在http請求頭中,所有可以繼承該類來處理http請求頭中的token資訊
ExceptionTranslationFilter(無法被覆寫)
負責處理異常異常,由AuthenticationEntryPoint處理AuthenticationException以及匿名導緻的AccessDeniedException,AccessDeniedHandler處理AccessDeniedException,可以分别實作這兩個接口來進行自定義的處理,使用一下代碼配置自定義的處理
http
//自定義失敗時的處理
.exceptionHandling()
.authenticationEntryPoint(restfulAuthenticationEntryPoint)
.accessDeniedHandler(restfulAccessDeniedHandler)
.and();
AbstractSecurityInterceptor(無法被覆寫)
非登入的請求都會到處此過濾器,spring security主要的流程都會在此過濾器中進行,詳細的内容在權限控制裡面寫,預設實作是FilterSecurityInterceptor
總結
spring security的一些基本知識,介紹一些在自定義spring security是常見的類或接口