spring-boot-security元件總結補充
前言
spring-boot-security
相關知識暫時告一段落,今天我們抽點時間做一次總結,也算是對最近幾天知識的回顧。
Security
補充內容
我們先說補充內容,在我們之前分享security
元件有兩個知識點被我遺漏了,然後今天總結的時候才發現,所以今天我們在這裡補充下。這兩個知識點都是和配置類相關的,一個是登出的相關配置,一個是token
的相關配置。
退出登入設定
先看登出配置,登出配置就是設定使用者退出登入相關頁面、介面地址、處理器等,和登入設定類似:
// 獲取登出設定物件 .and().logout() // 設定登出地址 .logoutUrl("/logout") // 設定登出成功後跳轉地址 .logoutSuccessUrl("/logoutPage") // 設定退出成功後處理器 .logoutSuccessHandler(syskeLogoutSuccessHandler)
這裡簡單解釋下:
logoutUrl
設定的是退出登入的觸發地址,這個地址可以隨便指定,哪怕資源不存在也不影響;logoutSuccessUrl
設定的是退出登入成功後跳轉的頁面,如果你需要退出登入成功後返回一個頁面,那推薦你用這種方式,這時候返回的就是你指定的頁面logoutSuccessHandler
設定退出登入處理器,如果你需要返回json
之類的資料,那可以用這種方式
但是logoutSuccessUrl
和logoutSuccessHandler
只能設定一個,而且後面的會把前面的設定的覆蓋掉,所以你需要根據自己的需要選擇。
下面是我寫的退出登入成功處理器的實現:
@Component public class SyskeLogoutSuccessHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { // 登出成功後的相關操作 System.out.println("退出登入成功"); httpServletResponse.setContentType("application/json;charset=UTF-8"); HashMap<String, Object> result = Maps.newHashMap(); result.put("message", "退出登入成功"); result.put("success", Boolean.TRUE); result.put("code", 2000); httpServletResponse.getWriter().write(JSON.toJSONString(result)); } }
說明:昨天我們說登入介面要放一個空介面,但是搞清楚logoutUrl
的地址之後,我想loginProcessingUrl
應該也是這也,所以又去試了下,發現確實一樣,登入介面是可以隨意指定的,看來昨天可能是配置的問題。
token相關配置
token
的相關設定今天又實際搞了下,暫時還沒理清楚實際應用場景,而且設定的引數也沒有任何效果,所以今天就先不分享,後續搞清楚了再來分享。
內容總結
和上次執行緒池總結一樣,我們先貼一張腦圖(公眾號回覆【spring-boot-security
】獲取腦圖原始檔),今天的總結內容有就是圍繞腦圖展開。
security
元件的核心內容基本上就是我們這幾天分享的知識點,主要以security
security
還對第三方安全框架做了支援,比如oauth2
、openid
、saml2
,好像目前就支援這三種,不過這三種已經算是比較流行的安全框架了。
以下就是我們security
相關的知識點,獲取腦圖公眾號回覆【spring-boot-security
】獲取腦圖原始檔即可。
配置類
- 常用配置方法
configure(AuthenticationManagerBuilder auth)
:配置登入認證處理configure(HttpSecurity http)
:配置資源許可權、登入頁面等configure(WebSecurity web)
:WebSecurityConfigurerAdapter
資源鑑權設定
authorizeRequests
:獲取資源許可權設定物件antMatchers
:設定訪問資源表示式hasAnyRole
:配置資源的訪問角色hasAnyAuthority
:配置資源的訪問許可權anyRequest
:除配置許可權資源外的其他資源permitAll
:設定指定資源的訪問許可權為無條件訪問anonymous
:設定允許匿名訪問
登入配置
formLogin
:獲取登入頁設定物件loginPage
:設定登入頁loginProcessingUrl
:設定登入處理介面- 登入成功
successHandler
:設定登入成功處理器successForwardUrl
:設定登入成功跳轉頁面defaultSuccessUrl
:設定登入成功預設頁面
- 登入失敗
failureForwardUrl
:設定登入失敗跳轉頁面failureHandler
:設定登入失敗處理器
登出配置
logout
:獲取登出設定物件logoutUrl
:設定登出介面地址logoutSuccessHandler
:設定登出成功處理器logoutRequestMatcher
:設定登出匹配地址(訪問設定的地址,就會觸犯登出操作)addLogoutHandler
:新增登出處理器defaultLogoutSuccessHandlerFor
:設定登出成功處理器、登出匹配地址deleteCookies
:設定是否刪除cookie
token
相關配置
tokenValiditySeconds
:設定token
過期時間tokenRepository
:設定token
處理器(生成、刪除、更新)
其他配置
userDetailsService
:設定使用者資料獲取服務httpBasic
:啟用http基本校驗csrf
:設定跨越訪問校驗
元件依賴
spring-boot-starter-security
擴充套件
oauth2
openid
saml2
元件
- 登入認證處理器:
AuthenticationProvider
- 登入結果處理器:
AuthenticationFailureHandler
AuthenticationSuccessHandler
- 登出處理器
LogoutSuccessHandler
LogoutHandler
token
元件:PersistentTokenRepository
- 使用者資訊元件:
UserDetailsService
- 密碼加密器:
PasswordEncoder
前期知識點回顧
總結
截止到今天,security
相關的基礎知識我們就算講完了,雖然好多知識也沒講(第三方安全框架整合、token
等),但是也算是把security
的一些基礎知識講的差不多了,而且在一些細節問題的探討和研究上(比如登入、登出等配置),我應該講的算比較細了,當然從我的角度來說,經過這幾天的梳理和摸索,我基本上把securtiy
的整個使用流程搞清楚了(說到這裡,我發現我忘記畫流程圖了),至少在security
使用方面不會有太大問題,總之我是有收穫的。
最後我希望這幾天的內容能夠真正幫助到大家,週末愉快呀!