天天看點

spring security基本知識前言一、spring security的核心類或接口二、spring security主要過濾器(按順序)總結

@[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是常見的類或接口