SpringBoot之整合SpringSecurity,為自己的系統提供安全保障
需求:
1.許可權控制:角色有多種角色,每個角色對應多個使用者,每個角色又對應不同的選單許可權
2.資源控制:
①有些地址只能當使用者登入之後才能訪問
②有些地址可以對無狀態使用者開放,例如API
③對不同角色的使用者的訪問的許可權進行控制
…
3.系統登入與登出:登入成功後將使用者資訊儲存在系統中,轉向成功頁面,否則重新指向到登入頁面,並提示錯誤資訊
初步解決方案:
使用filter完成所有需求:
①將使用者登入的資訊儲存在session中,在filter進行判斷,請求的地址是否是在登入 之後才能訪問,然後寫一堆if判斷,解決問題1
②解決方法和問題①一樣的,在filter中進行過濾
③對不同角色有不同的許可權則也可以在filter中操作,根據使用者資訊查到使用者所屬角 色,再進行判斷,解決問題。
④系統的登入和登出可以使用一個action,在action中進行這些邏輯處理。解決問題
遇到的問題:
在使用如上方法完成需求之後,反過來看,會發現有好多冗餘程式碼,使系統變得臃腫,光 filter裡面就會出現大量的if語句,而且系統程式碼並不能被下一個系統直接複用,沒有將功能進行模組化的開發。
最終解決方案:
使用springboot 對spring security進行整合:
為什麼使用security?
①Spring Security是能夠為J2EE專案提供綜合性的安全訪問控制解決方案的安全框架;
②Spring Security 完美的解決了我以上的需求
③有了security我可以更加便捷的管理我的系統,攔截一個地址,不再需要我去配置一 個filter,只需要新增一個配置就能搞定了,廢話不多說進入正題吧:
開始coding吧
spring security的starterMaven包:
一、首先進行安全入口的配置:
WebSecurityConfig.java
WebSecurityConfig 繼承WebSecurityConfigurerAdapter重寫config,configureGlobal方法
這裡面可以配置不需要攔截的url,和登入,登出後的處理頁面,還能新增認證資料來源,再登入時獲取額外的引數,例如後面提到的驗證碼等引數
這個方法用來載入 處理登入的邏輯程式碼(使用者名稱,密碼,驗證碼等邏輯驗證)
二、使用者驗證
CustAuthenticationProvider.java 實現AuthenticationProvider介面中的authenticate方法進行登入認證
三、封裝使用者資訊類
CustUserDetails.java 實現UserDetails介面
四、根據使用者名稱獲取使用者資訊
SnailUserDetailsService.java 實現UserDetailsService介面中的loadUserByUsername方法,從資料庫中載入使用者資訊並封裝到CustUserDetails中返回
五、新增額外引數驗證:
在普通的認證中,我們只能對使用者名稱和密碼進行驗證,不能夠獲取表單中額外引數進行驗證(如驗證碼),但是security給我們開啟了一扇門,還記得步驟一中的authenticationDetailsSource這個原始碼,這個就是載入額外資料來源引數,我們只需建立一個類實現AuthenticationDetailsSource介面中的buildDetails方法,將我們需要的額外引數載入進來即可
CustomAuthenticationDetailsSource.java實現AuthenticationDetailsSource介面
建立CustomWebAuthenticationDetails.java繼承WebAuthenticationDetails載入引數
六、到這裡,所有程式碼都寫完了,我們還有一個需求就是如何在專案中獲取使用者資訊:security提供了SecurityContextHolder這個類,能夠幫助我們獲取使用者的所有資訊,使用方式如下:
附上所有程式碼下載連結,使用時請大家根據自己的開發環境進行相應的調整,如果沒有積分的可以留言,我會上傳到百度雲中,提供你們下載。
csdn:https://download.csdn.net/download/weixin_34311210/10400629
百度雲:https://pan.baidu.com/s/1NNgCgk_2iqjMgq6tgeJEog
相關文章
- 智慧防疫系統為建築工地復工復產提供安全保障
- SpringBoot 整合SpringSecurity JWTSpring BootGseJWT
- SpringBoot 整合 SpringSecurity 梳理Spring BootGse
- 《SpringBoot極簡教程》第16章SpringBoot安全整合SpringSecuritySpring BootGse
- SpringBoot框架整合SpringSecurity實現安全訪問控制Spring Boot框架Gse
- SpringSecurity之整合JWTSpringGseJWT
- SpringBoot整合SpringSecurity(入門級)Spring BootGse
- SpringSecurity許可權管理系統實戰—四、整合SpringSecurity(上)SpringGse
- SpringSecurity許可權管理系統實戰—五、整合SpringSecurity(下)SpringGse
- SpringSecurity許可權管理系統實戰—六、SpringSecurity整合JWTSpringGseJWT
- 使用OAuth2和JWT為微服務提供安全保障OAuthJWT微服務
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- 使用 OAuth 2 和 JWT 為微服務提供安全保障 – 基本概念OAuthJWT微服務
- 使用 OAuth 2 和 JWT 為微服務提供安全保障 - 基本概念OAuthJWT微服務
- SpringBoot2 整合 SpringSecurity 框架,實現使用者許可權安全管理Spring BootGse框架
- 電子商務Java微服務 SpringBoot整合SpringSecurityJava微服務Spring BootGse
- Linux的系統的安全如何保障?保護Linux系統安全的九個常用方法Linux
- 視訊通訊保障系統為‘救護車安全保駕護航’
- SpringBoot企業級整合SpringSecurity(WEB+APP+授權)Spring BootGseWebAPP
- 安智聯365 智慧安防平臺為全球使用者提供安全保障
- 幾個tips,教你如何保障自己的網路安全?
- 阿里云為鑫廣進提供SAP系統整合一體化解決方案阿里
- ERP系統資料安全性如何保障
- 保障醫共體業務系統安全,綠盟科技在行動
- 雲CRM系統如何保障企業資料安全?
- 用Mcafee打造自己的安全系統詳解
- (七) SpringBoot起飛之路-整合SpringSecurity(Mybatis、JDBC、記憶體)Spring BootGseMyBatisJDBC記憶體
- 充分利用系統的組策略保障共享目錄安全
- 選擇什麼樣的客服系統,才能保障資料安全?
- “自主可控”移動資訊化系統保障“資料安全”
- 從啟動開始保障LINUX系統安全(轉)Linux
- SpringBoot 整合 SpringSecurity + MySQL + JWT 附原始碼,廢話不多直接盤Spring BootGseMySqlJWT原始碼
- 為即將到來的北京冬殘奧會提供技術保障
- 系統安全從自己電腦的“安全紅線”開始(轉)
- C-V2X安全證書:保障車路雲系統通訊安全的關鍵
- CACTER郵件安全閘道器安全解決方案——保障企業郵件系統安全
- 成為自己(二):鴻蒙 Harmony 系統篇鴻蒙
- 在SpringBoot中使用SpringSecuritySpring BootGse