版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章SpringBoot的安全控制學習目的與要求本章首先重點講解SpringSecurity安全控制機制,然后介紹SpringBootSecurity操作實例。通過本章的學習,掌握如何使用SpringSecurity安全控制機制解決企業(yè)應用程序的安全問題?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄8.1SpringSecurity快速入門8.2SpringBoot的支持8.3實際開發(fā)中的SpringSecurity操作實例《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.1什么是SpringSecuritySpringSecurity是一個專門針對Sping應用系統(tǒng)的安全框架,充分利用了Spring框架的依賴注入和AOP功能,為Spring應用系統(tǒng)提供安全訪問控制解決方案。在SpringSecurity安全框架中,有兩個重要概念,即授權(Authorization)和認證(Authentication)。授權即確定用戶在當前應用系統(tǒng)下所擁有的功能權限;認證即確認用戶訪問當前系統(tǒng)的身份?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.2SpringSecurity的用戶認證在SpringSecurity安全框架中,可以通過配置AuthenticationManager認證管理器完成用戶認證。示例代碼如下:@BeanpublicAuthenticationManagerauthenticationManager(AuthenticationConfigurationauthenticationConfiguration)throwsException{returnauthenticationConfiguration.getAuthenticationManager();}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.內存中的用戶認證在SpringSecurity安全框架中,InMemoryUserDetailsManager實現了UserDetailsService,以支持存儲在內存中的用戶名/密碼的身份驗證。InMemoryUserDetailsManager通過實現UserDetailsMnager接口提供對UserDetails的管理。當SpringSecurity配置為接受用戶名和密碼進行身份驗證時,會使用基于UserDetails的身份驗證?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.內存中的用戶認證@BeanpublicUserDetailsServiceusers(){ UserDetailsuser=User.builder() .username("chenheng") .password("xxxx")
.roles("USER") .build(); UserDetailsadmin=User.builder() .username("admin") .password("yyyy")
.roles("DBA","ADMIN") .build(); returnnewInMemoryUserDetailsManager(user,admin);}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
2.通用的用戶認證我們在實際應用中,可以查詢數據庫獲取用戶和權限,這時我們需要自定義實現org.springframework.security.core.userdetails.UserDetailsService接口的類,并重寫publicUserDetailsloadUserByUsername(Stringusername)方法查詢對應的用戶和權限?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.4SpringSecurity的請求授權在SpringSecurity安全框架中,可以通過配置SecurityFilterChain完成用戶授權。示例代碼如下:@BeanpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{ http .authorizeHttpRequests(authorize->authorize .requestMatchers("/xxx").permitAll() .requestMatchers("/user/**").hasRole("USER") //其他所有請求認證授權后才能訪問
.anyRequest().authenticated() ); returnhttp.build();}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.4SpringSecurity的請求授權在filterChain(HttpSecurityhttp)方法中,使用HttpSecurity的authorizeHttpRequests()方法的子節(jié)點給指定用戶授權訪問URL模式。我們可以通過requestMatchers()方法匹配URL路徑。匹配請求路徑后,可以針對當前用戶對請求進行安全處理。方法用途anyRequest()匹配所有請求路徑access(Stringattribute)SpringEL表達式結果為true時可以訪問anonymous()匿名可以訪問authenticated()用戶登錄后可訪問denyAll()用戶不能訪問fullyAuthenticated()用戶完全認證可以訪問(非remember-me下自動登錄)hasAnyAuthority(String...)參數表示權限,用戶權限與其中任一權限相同就可以訪問hasAnyRole(String...)參數表示角色,用戶角色與其中任一角色相同就可以訪問hasAuthority(Stringauthority)參數表示權限,用戶權限與參數相同才可以訪問hasRole(Stringrole)參數表示角色,用戶角色與參數相同才可以訪問permitAll()任何用戶都可以訪問rememberMe()允許通過remember-me登錄的用戶訪問《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.5SpringSecurity的核心類SpringSecurity的核心類包括Authentication、DaoAuthenticationProvider、GrantedAuthority、PasswordEncoder、SecurityContextHolder、UserDetails和UserDetailsService?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
1.AuthenticationAuthentication用來封裝用戶認證信息的接口,在用戶登錄認證之前,SpringSecurity將相關信息封裝為一個Authentication具體實現類的對象,在登錄認證成功后將生成一個信息更全面、包含用戶權限等信息的Authentication對象,然后將該對象保存在SecurityContextHolder所持有的SecurityContext中,方便后續(xù)程序進行調用,如當前用戶名、訪問權限等?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
2.SecurityContextHolderSecurityContextHolder顧名思義是用來持有SecurityContext的類。SecurityContext中包含當前認證用戶的詳細信息。SpringSecurity使用一個Authentication對象描述當前用戶的相關信息。例如,最常見的是獲得當前登錄用戶的用戶名和權限。privateStringgetUname(){
returnSecurityContextHolder.getContext().getAuthentication().getName();}privateStringgetAuthorities(){
Authenticationauthentication=SecurityContextHolder.getContext().getAuthentication();
List<String>roles=newArrayList<String>();
for(GrantedAuthorityga:authentication.getAuthorities()){
roles.add(ga.getAuthority());
}
returnroles.toString();}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
3.UserDetailsUserDetails是SpringSecurity的一個核心接口。該接口定義了一些可以獲取用戶名、密碼、權限等與認證相關的信息的方法。通常需要在應用中獲取當前用戶的其他信息,如Email、電話等。這時只包含認證相關的UserDetails對象可能就不能滿足我們的需要了。我們可以實現自己的UserDetails,在該實現類中定義一些獲取用戶其他信息的方法,這樣我們就可以直接從當前SecurityContext的Authentication的principal中獲取用戶的其他信息。Authentication.getPrincipal()的返回類型是Object,但通常返回的其實是一個UserDetails的實例,通過強制類型轉換可以將Object轉換為UserDetails類型?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
4.UserDetailsServiceUserDetails是通過UserDetailsService的loadUserByUsername(Stringusername)方法加載的。UserDetailsService也是一個接口,也需要實現自己的UserDetailsService來加載自定義的UserDetails信息。登錄認證時,SpringSecurity將通過UserDetailsService的loadUserByUsername(Stringusername)方法獲取對應的UserDetails進行認證,認證通過后將該UserDetails賦給認證通過的Authentication的principal,然后再將該Authentication保存在SecurityContext中。在應用中,如果需要使用用戶信息,可以通過SecurityContextHolder獲取存放在SecurityContext中的Authentication的principal,即UserDetails實例?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
5.GrantedAuthorityAuthentication的getAuthorities()方法可以返回當前Authentication對象擁有的權限(一個GrantedAuthority類型的數組),即當前用戶擁有的權限。GrantedAuthority是一個接口,通常是通過UserDetailsService進行加載,然后賦給UserDetails。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
6.DaoAuthenticationProvider在SpringSecurity安全框架中,默認使用DaoAuthenticationProvider實現AuthenticationProvider接口進行用戶認證的處理。DaoAuthenticationProvider進行認證時,需要一個UserDetailsService來獲取用戶信息UserDetails。當然我們可以實現自己的AuthenticationProvider,進而改變認證方式。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
7.PasswordEncoder在SpringSecurity安全框架中,是通過PasswordEncoder接口完成對密碼的加密。SpringSecurity對PasswordEncoder有多種實現,包括MD5加密、SHA-256加密等,開發(fā)者只需直接使用即可。在SpringBoot應用中,使用BCryptPasswordEncoder加密是較好的選擇。BCryptPasswordEncoder使用BCrypt的強散列哈希加密實現,并可以由客戶端指定加密強度,強度越高安全性越高?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.1.6SpringSecurity的驗證機制SpringSecurity的驗證機制是由許多Filter實現的,Filter將在SpringMVC前攔截請求,主要包括注銷Filter(LogoutFilter)、用戶名密碼驗證Filter(UsernamePasswordAuthenticationFilter)等內容。Filter再交由其他組件完成細分的功能,最常用的UsernamePasswordAuthenticationFilter會持有一個AuthenticationManager引用,AuthenticationManager是一個驗證管理器,專門負責驗證。AuthenticationManager持有一個AuthenticationProvider集合,AuthenticationProvider是做驗證工作的組件,驗證成功或失敗之后調用對應的Hanlder(處理)。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄8.1SpringSecurity快速入門8.2SpringBoot的支持8.3實際開發(fā)中的SpringSecurity操作實例《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.2SpringBoot的支持在SpringBoot應用中,我們只需引入spring-boot-starter-security依賴即可使用SpringSecurity安全框架,這是因為SpringBoot對SpringSecurity提供了自動配置功能。從org.springframework.boot.autoconfigure.security.SecurityProperties類中,我們可以看到使用以“spring.security”為前綴的屬性配置了SpringSecurity的相關默認配置?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
目錄8.1SpringSecurity快速入門8.2SpringBoot的支持8.3實際開發(fā)中的SpringSecurity操作實例《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例【例7-1】在SpringBoot應用中,使用基于SpringDataJPA的SpringSecurity安全框架。1.創(chuàng)建SpringBootWeb應用ch8創(chuàng)建基于Lombok、SpringDataJPA、Thymeleaf及SpringSecurity的Web應用ch8,如圖8.1所示?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例2.修改pom.xml文件,添加MySQL依賴在pom.xml文件中添加MySQL連接器依賴,配置內容與【例6-1】中的相同,不再贅述。3.設置Web應用ch8的上下文路徑及數據源配置信息在應用ch8的perties文件中配置內容與【例6-1】中的相同,不再贅述。4.整理腳本樣式靜態(tài)文件JS腳本、CSS樣式、圖片等靜態(tài)文件默認放置在src/main/resources/static目錄下,ch8應用引入的BootStrap和jQuery與【例5-5】中的一樣,不再贅述?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例5.創(chuàng)建用戶和權限持久化實體類在應用ch8的src/main/java目錄下,創(chuàng)建名為com.ch.ch8.entity的包,并在該包中創(chuàng)建持久化實體類MyUser和Authority。MyUser類用來保存用戶數據,用戶名唯一。Authority用來保存權限信息。用戶和權限是多對多的關系?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例6.創(chuàng)建數據訪問層接口在應用ch8的src/main/java目錄下,創(chuàng)建名為com.ch.ch8.repository的包,并在該包中創(chuàng)建名為MyUserRepository的接口,該接口繼承了JpaRepository,核心代碼如下:publicinterfaceMyUserRepositoryextendsJpaRepository<MyUser,Integer>{ //根據用戶名查詢用戶,方法名命名符合SpringDataJPA規(guī)范
MyUserfindByUsername(Stringusername);}在com.ch.ch8.repository包中,創(chuàng)建名為AuthorityRepository的接口,該接口繼承了JpaRepository,具體代碼如下:publicinterfaceAuthorityRepositoryextendsJpaRepository<Authority,Integer>{}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例7.創(chuàng)建業(yè)務層在應用ch8的src/main/java目錄下,創(chuàng)建名為com.ch.ch8.service的包,并在該包中創(chuàng)建UserService接口和UserServiceImpl實現類?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例8.創(chuàng)建控制器類在應用ch8的src/main/java目錄下,創(chuàng)建名為com.ch.ch8.controller的包,并在該包中創(chuàng)建控制器類TestSecurityController?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例9.創(chuàng)建應用的安全控制相關實現在應用ch8的src/main/java目錄下,創(chuàng)建名為com.ch.ch8.security的包,并在該包中創(chuàng)建MyUserSecurityService、MyAuthenticationSuccessHandler和SpringSecurityConfig類。MyUserSecurityService實現了UserDetailsService接口,并通過重寫loadUserByUsername(Stringusername)方法查詢對應的用戶,并將用戶名、密碼、權限等與認證相關的信息封裝在UserDetails對象中?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例MyAuthenticationSuccessHandler繼承了SimpleUrlAuthenticationSuccessHandler類,并重寫了handle(HttpServletRequestrequest,HttpServletResponseresponse,Authenticationauthentication)方法,根據當前認證用戶的角色指定對應的URL。SpringSecurityConfig類是認證和授權處理的配置類,需要使用@Configuration和@EnableWebSecurity注解。在該類中配置了加密規(guī)則、認證實現方式、認證管理器以及授權操作?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學出版社,2024
8.3實際開發(fā)中的SpringSecurity操作實例10.創(chuàng)建用于測試的視圖頁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年工程建設項目勞務分包合作協(xié)議
- 2024年工程項目人工費用承包合同模板
- 2024年工程融資居間協(xié)議
- 四年級科學下冊第三單元食物3營養(yǎng)要均衡教案教科版
- 2024年婚禮策劃保安服務合同
- 2024年工程設備采購合同范本
- Proanthocyanidin-A4-Standard-生命科學試劑-MCE
- PPARα-agonist-2-生命科學試劑-MCE
- 急診科室的績效考核體系計劃
- 管理團隊績效考核培訓
- 《食品添加劑應用技術》第二版 課件 任務3.2 抗氧化劑的使用
- 2023-2024學年全國初一上道德與法制人教版期末考試試卷(含答案解析)
- 會議與協(xié)作平臺管理制度
- 消毒供應室特種設備管理
- 食品智能化加工技術
- 銀行轉賬截圖生成器制作你想要的轉賬截圖
- 2022年版 義務教育《數學》課程標準
- 廣東廣州市白云區(qū)人民政府棠景街道辦事處招考聘用政府雇員筆試題庫含答案解析
- 2024重度哮喘診斷與處理中國專家共識解讀課件
- 家長會課件:小學一年級家長會語文老師課件
- 成人住院患者靜脈血栓栓塞癥Caprini、Padua風險評估量表
評論
0/150
提交評論