12尚硅谷眾籌項目權限系統(tǒng)認證授權springsec框架_第1頁
12尚硅谷眾籌項目權限系統(tǒng)認證授權springsec框架_第2頁
12尚硅谷眾籌項目權限系統(tǒng)認證授權springsec框架_第3頁
12尚硅谷眾籌項目權限系統(tǒng)認證授權springsec框架_第4頁
12尚硅谷眾籌項目權限系統(tǒng)認證授權springsec框架_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Java 課程系列項目課程系列之 Atcrowdfunding尚硅谷 JavaEE 教研組版本:V1.0第一章 SpringSecurity-簡介1. 簡介ml.htmlSpringSecurity 融合 Spring 技術棧,提供 JavaEE 應用的整體安全解決方案;Spring Security 為基于 Java EE 的企業(yè)軟件應用提供全面的安全服務。Spring Security 只需要少量配置,就能構(gòu)建一個強大的安全的應用系統(tǒng)。目前市面上受歡迎的兩個安全框架:Apache Shiro、SpringSecurity;SpringSecurity 可以無縫整合 Spring 應用,具有

2、強大的自動化 web 安全管控功能。而 Shiro 是一個輕量級強大的安全框架,可以脫離 web 應用來提供安全管控,但是對于 web 的一些定制安全需要手動編寫;SpringBoot 底層默認整合 SpringSecurity 作為安全框架,所以我們推薦 web 應用使用 SpringSecurity 來安全;2. 概念l認證authentication:驗證“驗證”是指建立主體(principal)的過程,主體就是他們聲稱是誰(“主體”通常指用戶、設備或在應用程序中可以執(zhí)行動作的其他系統(tǒng))。也就是“證明你是誰”Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程

3、系列l(wèi)authorization:“”是指確定主體(principal)是否被執(zhí)行系統(tǒng)中某個動作的過程。 也就是“你能做什么!”l 為了達到“”決策(安全框架決定你是否限做此事),“驗證”(authentication)過程已經(jīng)建立了主體的(Principal)3. 文檔Hello Spring Security <> 基于 Java 配置整合示例Hello Spring Security Boot <> 與 SpringBoot 整合案例Hello Spring Security XML <> 基于 XML 方式整合示例Hello Spring MVC S

4、ecurity <> SpringMVC 集成示例Custom Login Form <> 自定義登錄表單示例4. 支持的認證模式在驗證級別,Spring Security 支持廣泛的認證模型。這些認證模型中的大部分要么由第提供,要么由相關標準機構(gòu)(如互聯(lián)網(wǎng)工程任務組)開發(fā)。此外,SpringSecurity 提供了的一套驗證功能。具體而言,Spring Security 當前支持與所有這些技術的驗證集成;Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)l HTTP BASIC驗證標頭HTTP BASIC authentication headers

5、(an IETF RFC-based standard)參考:l HTTP Digest驗證標頭HTTP Digest authentication headers (an IETF RFC-based standard)l HTTP X.509 客戶交換HTTP X.509 clientexchange (an IETF RFC-based standard)l LDAP(一種非常常見的跨平臺驗證方法,特別是在大型環(huán)境中)LDAP (a very common approach to cross-platform authentication needs, especially in lar

6、ge environments)Java 課程系列Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)l 基于表單的驗證(用于簡單的用戶界面需求)Form-based authentication (for simple user interface needs)l OpenID驗證OpenID authenticationl 基于預先建立的請求標頭的驗證Authentication based on pre-established request headers (such as Computer Associates Siteminder)l Jasig認證服務(也稱為 CA

7、S,是一種流行的開源單點登錄系統(tǒng))Jasig Central Authentication Service (otherwise known as CAS, which is a popular open source single sign-on system)l 方法調(diào)用(RMI)和 HttpInvoker(Spring協(xié)議)的透明驗證上下文Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol)

8、l 自動“記住我”驗證Automatic "remember-me" authentication (so you can tick a box to avoid re-authentication for a predetermined period of time)l 驗證(每個驗證自動承擔特定的安全)Anonymous authentication (allowing every unauthenticated call to automatically assume a particular security identity)l Runas驗證(如果一個調(diào)用應繼續(xù)

9、使用不同的安全標識,則非常有用)Run-as authentication (which is useful if one call should proceed with a different security identity)l Java驗證和服務(JAAS)Java Authentication and Authorization Service (JAAS)l JavaEE 容器驗證(如果需要,您仍然可以使用容器管理驗證)Java EE container authentication (so you can still use Container Managed Authenti

10、cation if desired)l Java 開源單點登錄(JOSSO)Java Open Source Single Sign-On (JOSSO) *l OpenNMS管理平臺*Java 課程系列5. 模塊劃分Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Core - spring-security-core.jar模塊認證、功能、支持 jdbc-user 功能、支持的Spring 應用Remoting - spring-security-remoting.jar交互模塊一般不需要,可以使用 Spring Remoting 功能簡化客戶端交互Web - spring

11、-security-web.jarweb 安全模塊web 項目使用,基于 URL 的(access-control)Config - spring-security-config.jarjava 配置模塊必須依賴含xml 方式和 java 注解方式來使用SpringSecurity 功能OpenNMS Network Management Platform *l 您的驗證系統(tǒng)Your own authentication systems (see below)l 其他Kerberos AppFuse * AndroMDA * Mule ESB *Direct Web Request (DWR)

12、 * Grails *Tapestry * JTrac * Jasypt * Roller * Elastic Path *Atlassian Crowd *Java 課程系列6.4 種使用方式l一種是全部利用配置文件,將用戶、權限、(url)硬編碼在 xml 文件中l(wèi)二種是用戶和權限用數(shù)據(jù)庫,而(url)和權限的對應采用硬編碼配置l三種是細分和權限,并將用戶、權限和均采用數(shù)據(jù)庫,并且自定義過濾器,代替原有的 FilterSecurityInterceptor并 分 別 實 現(xiàn) AccessDecisionManager 、過濾器, InvocationSecurityMetadataSour

13、ceService 和 UserDetailsService,并在配置文件中進行相應配置。l四是修改 springsecurity 的源代碼, 主要是修改 InvocationSecurityMetadataSourceService 和UserDetailsService 兩個類。nInvocationSecurityMetadataSourceServiceu 將配置文件或數(shù)據(jù)庫中的(url)提取出來成為 url 和權限列表的 Map 供Security 使用nUserDetailsServiceu 提取用戶名和權限組成一個完整的(UserDetails)User對象,該對象可以提供用戶的

14、詳細信息供 AuthentationManager 進行認證與使用Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)LDAP - spring-security-ldap.jarldap(輕量目錄協(xié)議)支持模塊可選依賴包,LDAP 功能支持ACL - spring-security-acl.jarACL 支持ACL(Access-Control-List)列表細粒度的(RBAC+ACL)CAS - spring-security-cas.jarCAS 整合支持CAS(Central Authentication Service)認證服務。開源ApereoCAS 整合OpenID

15、 - spring-security-openid.jar OpenID 認證方式支持OpenID Web驗證支持。 用于外部 OpenID 服務器對用戶進行驗證(,,新浪等第登錄)Test - spring-security-test.jar測試模塊快速的測試 SpringSecurity 應用Java 課程系列第二章 SpringSecurity-HelloWorld2.1 測試環(huán)境搭建2.1.1 創(chuàng)建普通 maven-war 工程:spring-security-helloworldlpom 文件增加依賴Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2

16、.1.2 web.xml 配置2.1.3 spring 配置:spring.xmlJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xmlns:context=""xmlns:mvc=""xsi:schemaLocation="<servlet><servlet-name>spri

17、ngDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param><load-on-st

18、artup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><version>1.2</version></dependency>Java 課程系列2.1.4 導入實驗l導入頁面Java 大數(shù)據(jù)前端 python 人工智能

19、資料,可:尚硅谷官網(wǎng)"><context:component-scan base-package="com.atguigu.security"></context:component-scan><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"><

20、;/property><property name="suffix" value=".jsp"></property></bean><mvc:annotation-driven /><mvc:default-servlet-handler /></beans>Java 課程系列l(wèi)導入 controllerJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2.1.5 運試2.2 引入 SpringSecurity 框架2.2.1添加 securi

21、ty-pom 依賴Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2.2.2 web.xml 中添加 SpringSecurity 的 Filter 進行安全2.2.3 加入 SpringSecurity 配置類lConfiguration、Bean 注解作用2.2.4 啟動測試效果l所有受限(包括靜態(tài))l需要一個默認的登錄頁面(框架自帶的)l賬號錯誤會有提示Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)查看登錄頁面的源碼,發(fā)現(xiàn)有個 hidden-input;name="_csrf"這是 Sprin

22、gSecurity 幫我們防止“跨站請求”;還可以防止表單重復提交。l。lSpringSecurity-實驗第三章3.1實驗一:首頁和靜態(tài)l配置類(AppWebSecurityConfig extends WebSecurityConfigurerAdapter)l重寫 configure(HttpSecurity http)方法Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)測試結(jié)果n靜態(tài)和 index.jsp 都可以n不的Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3.2實驗二:默認及自定義登錄頁l開啟 formL

23、ogin()功能l靜態(tài)和 index.jsp 都可以l不的n重定向到登錄頁n404 錯誤l總結(jié):默認表單登錄頁面的規(guī)則1)、自動生成一個登錄頁2)、登錄請求被提交到 /loginPOST 下3)、生成隱藏域,可以防重復提交和跨站請求;<input name="_csrf" type="hidden" value="755f0b3c-0965-430b-852e-dcf6c77e7edb" />為了測試方便,先禁用這個功能: http.csrf().disable();4)、默認提交的字段名為:name='passw

24、ord'name='username'l指定登錄頁nhttp.formLogin().loginPage("/index.jsp"); /去到指定的登錄頁n靜態(tài)和 index.jsp 都可以n不的u重定向到自定義登錄頁u404 錯誤3.3 實驗三:自定義表單登錄邏輯分析l表單提交地址:$PATH /index.jspl表單提交請求方式:postl表單提交請求失敗,提取錯誤消息:$SPRING_SECURITY_LAST_EXCEPTION.messagel如何提交表單:Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系

25、列n引入 jquery: <script src="$PATH /layui/jquery.min.js"></script>n$("form").submit();n表單提交參數(shù)名稱: usernamepasswordl提交請求被拒絕暫時禁用 csrf:http.csrf().disable();l登錄邏輯分析l測試結(jié)果Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3.4 實驗四:自定義認證用戶信息l自定義認證用戶信息lCSRF 跨站請求lSpringSecurity 添加了 csrf 功能【

26、DefaultCsrfToken】,所有的表單提交為了防止跨站請求,我們需要加上_csrf 項; 或者,暫時禁用 http.csrf().disable();<input type="hidden" name="$_csrf.parameterName" value="$_csrf.token"/>n$_csrf=>>>org.springframework.security.web.csrf.DefaultCsrfToken19116cfdn<input type="hidden&quo

27、t; name="_csrf" value="310988c2-3f9d-4651-9e19-6ef4b2c4aa3a"/>Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)如果不禁用 csrf,默認是開啟的狀態(tài);頁面不設置 csrf 表單域,那么,提交登錄請求會報錯l令牌值變化:n如果登錄(用戶名,正確),令牌會被刪除,n重新回到登錄頁或后退網(wǎng)頁,令牌會重新生成;n如果登錄失?。ㄓ脩裘?,錯誤),令牌不變。n刷新登錄頁,令牌值也不變l作用:n防止別的數(shù)據(jù),提交請求到我們的。Java 大數(shù)據(jù) 前端 python 人

28、工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)擴展-了解 XSS·XSS,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫全稱跨站,故將跨站縮寫為 XSS,XSS 是一種在 web 應用中的計算機安全漏洞,它web 用戶將代碼植入到提供給其它用戶使用的頁面中。·CSRF(Cross-site request forgery)跨站請求,也被稱為“One Click Attack”或者 Session Riding,通??s寫為 CSRF 或者 XSRF,是一種對的利用。盡管聽起來像跨站(XSS),但它與 XSS 非常不同,XSS 利用站點內(nèi)的信

29、任用戶,而 CSRF 則通過成受信任用戶的請求來利用受信任的。與 XSS相比,CSRF往往不大流行(因此對其進行防范的也相當稀少)和難以防范,所以被認為比 XSS 更具性。Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3.5 實驗五:用戶注銷完成l添加注銷功能(logout)http.logout()默認規(guī)則/logout:系統(tǒng)1)2)如果 csrf 開啟,必須 post 方式的/logout 請求,表單中需要增加 csrf token3)logoutUrl();系統(tǒng)需要的請求logoutSuccessUrl();4)系統(tǒng)以后要跳轉(zhuǎn)的頁面地址5)addLo

30、goutHandler():自定義注銷處理器deleteCookies():指定需要刪除的 cookie6)7)invalidateHttpSession():session 失效(DEBUG)3.6 實驗六:基于的l設置可以的l注意:n將.anyRequest().authenticated()錯誤的設置在前面,后面的設置就不起作用了。n設置所有,"/*"都可以,其他再進行的設置就起作用了n設置/level3/*可以不用登錄,:.anyRequest().anonymous();l擁有該的可以,否則不可以Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)J

31、ava 課程系列3.7 實驗七:自定義拒絕處理頁面l直接增加處理界面l在器類中增加處理l增加顯示頁面,將 main.jsp,命名為 unauth.jsp,增加一句提示信息l測試顯示效果l自定義異常處理器Java 大數(shù)據(jù)前端python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3.8 實驗八:記住我功能3.8.1 記住我功能-免登錄原理lhttp.rememberMe();l默認規(guī)則n頁面 checkbox 提交 remember-me 參數(shù)n默認記住 2 周登錄狀態(tài):AbstractRememberMeServicesn會在 cookie 中保存名為:remember-me 的 cook

32、iel記住了以前登錄的狀態(tài),以后再就不用登錄了l登錄后頁面,關閉瀏覽器,直接:可以,不必登錄。l這種方式,token 值是放置在內(nèi)存中的,服務器端重啟 tomcat,token 會失效。需要將 token在數(shù)據(jù)庫持久化才失效。Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3.8.2 記住我-數(shù)據(jù)版l引入 pom.xml包Java 大數(shù)據(jù)前端python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)配置數(shù)據(jù)源l創(chuàng)建表Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)create table persistent_logins (userna

33、me varchar(64) not null, series varchar(64) primary key,tokenvarchar(64) not null, last_used timestamp not null)Java 課程系列l(wèi)設置記住我第四章 認證使用數(shù)據(jù)庫保存/用戶數(shù)據(jù),完成認證功能4.1:重寫 jdbcAuthentication 規(guī)則(不推薦)l基于數(shù)據(jù)庫的 RBAC出我們需要的用戶以及這些用戶的權限(權限標識、)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)創(chuàng)建和 SpringSecurity 要求一模一樣的表,然后用默認 jd

34、bcAuthenticationl更新 jdbcAuthentication 里面所有我們需要實際運行的 sqllauthoritiesByUsernameQuery:根據(jù)用戶名他權限的 sqllusersByUsernameQuery:根據(jù)用戶名用戶的 sqll.:的 sql 均可定義4.1.1使用默認的用戶語句4.1.2使用默認的權限語句Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.2:自定義 UserDetailsService 檢索用戶4.2.1實現(xiàn) UserDetailService接口username)方法loadUserByUsername

35、(String4.2.2 實驗步驟1 創(chuàng)建表結(jié)構(gòu)security 實驗security.sql2 配置 configure(AuthenticationManagerBuilder auth)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3 編寫 UserDetailService 實現(xiàn):1)接口及已有實現(xiàn)類2)實現(xiàn) UserDetailService 接口,提供自定義實現(xiàn)類org.springframework.security.core.userdetails.UserDetailsServiceJava 大數(shù)據(jù) 前端 python 人工智能資料,可:

36、尚硅谷官網(wǎng)Java 課程系列4 運試結(jié)果,不一致,跳轉(zhuǎn)到登錄頁,并提示錯誤消息Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.2.3 debug 測試登錄-斷點調(diào)試1斷點-方法棧Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2 自定義 UserDetailService 實現(xiàn)類3 Dao 層認證提供者: DaoAuthenticationProviderDao 層認證提供者 DaoAuthenticationProvider,用于調(diào)用自定義的 UserDetailService 實現(xiàn)類方法Java 大數(shù)據(jù) 前端 pyt

37、hon 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4 抽象層用戶認證提供者: AbstractUserDetailsAuthenticationProvider抽象層用戶認證提供者,獲取dao 層查找的認證用戶信息,被封裝成UserDetails 對象,User類是UserDetails 接口實現(xiàn)類Java 大數(shù)據(jù)前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列1)org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.DefaultPreAuthe

38、nticationChecks 認證用戶賬號是否被鎖定,是否啟用,是否過期;用戶表中可以增加這些字段。Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2)public interface Authentication extends Principal封裝表單提交的認證信息認證用戶名和;鹽值為 nulllJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)采用 org.springframework.security.authentication.encoding.BasePasswordEncoder 默認加密器對表單提交

39、明文加密(其實并沒有進行任何加密,明文無變化)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列l(wèi)總結(jié)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.3 基于數(shù)據(jù)庫(MD5)認證 (debug)使用數(shù)據(jù)庫保存/用戶數(shù)據(jù),完成認證功能4.3.1 配置 configure(AuthenticationManagerBuilder auth)org.springframework.security.crypto.password.PasswordEncoder4.3.2 引入 MD5 加密工具類:MD5Util.java4.3

40、.3 PasswordEncoder 接口實現(xiàn)類:AppPasswordEncoderJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.3.4 Debug 測試,主要測試 matches 方法的調(diào)用過程1.表單提交:rawPasswordJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列2.數(shù)據(jù)庫:encodePassword3.調(diào)用自定義驗證器4.不一致,拋異常:Bad credentials ;一致,通過認證Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列5.創(chuàng)建 UsernameP

41、asswordAuthenticationToken對象,封裝認證信息Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.3.5源碼參考1 principal 認證主體-數(shù)據(jù)庫中User 數(shù)據(jù)2 authentication.getCredentials() 認證(表單中)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列3 authoritiesMapper.mapAuthorities(user.getAuthorities() 認證權限

42、集合該用戶擁有的權限,暫時寫死在代碼中的,后期要根據(jù)用戶所擁有的權限4 認證細節(jié):包括客戶端 ip 和 sessionidorg.springframework.security.web.authentication.WebAuthenticationDetailsJava 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列5 result 對象(UsernamePasswordAuthenticationToken)詳細描述Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.4 基于數(shù)據(jù)庫(BCryptPasswordEncoder

43、)加密認證4.4.1 PasswordEncoder 接口4.4.2使用 BCryptPasswordEncoder 進行加密4.4.3本地測試:main 方法Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列4.4.4 服務器運試將 main 方法生成的密文到數(shù)據(jù)庫中(注意:userpswd 字段長度),重新啟動服務器進試。第五章 細粒度權限5.1 前置細節(jié)【Role 和 Authority 的區(qū)別】5.1.1 用戶擁有的權限表示lroles("ADMIN","學徒","宗師")lauthoriti

44、es("USER","MANAGER");5.1.2 給授予權限(或權限)Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列5.1.3 權限:【roles 和 authorities 區(qū)別】l roles("ADMIN","學徒","宗師")增加"ROLE_"前綴存放:【"ROLE_ADMIN","ROLE_學徒","ROLE_宗師"】表示擁有的權限。一個表示的是多個權限用戶傳入的不

45、能以 ROLE_開頭,否則會報錯。ROLE_是自動加上的:直接傳入的名字,權限【new SimpleGrantedAuthority("ROLE_" +如果我們保存的用戶的role)】保存即可l authorities("USER","MANAGER");原樣存放:【"USER","MANAGER"】表示擁有的權限。如果我們保存的是真正的權限;直接傳入權限名字,權限【new SimpleGrantedAuthority(role)】保存無論是 Role 還是 Authority 都保List&l

46、t;GrantedAuthority>,每個用戶都擁有的權限集合->List<GrantedAuthority>5.1.4 驗證用戶權限1)通過(權限)驗證:.antMatchers("/level1/*").hasRole("學徒").antMatchers("/level1/*").hasAnyRole("學徒","ADMIN")擁有任何一個都可以驗證時會自動增加"ROLE_"進行查找驗證:【"ROLE_學徒","RO

47、LE_ADMIN"】Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列通過權限驗證.antMatchers("/level1/*").hasAuthority("學徒").antMatchers("/level1/*").hasAnyAuthority("學徒","ADMIN")擁有任何一個權限都可以驗證時原樣查找進行驗證:【"學徒","ADMIN"】5.2 細粒度的lauthenticated():通過認證的用

48、戶都可以lpermitAll():所有人,即使未登錄lauthorizeRequests():更細粒度的laccess(String): SpEL:Spring 表達式.access("hasRole('大師') AND hasAuthority('user:delete') OR hasIpAddress('5')")5.3 細粒度的相應注解使用注解與 SpEl 進行細粒度權限Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)Java 課程系列5.3.1 開啟注解權限模式EnableW

49、ebSecurity:開啟 Spring Security 注解EnableGlobalMethodSecurity(prePostEnabled=true):開啟全局的細粒度方法級別權限功能5.3.2 幾個權限檢查注解1 PreAuthorize:方法執(zhí)行前檢查2 PostAuthorize:方法執(zhí)行后檢查,失敗拋異常Java 大數(shù)據(jù) 前端 python 人工智能資料,可:尚硅谷官網(wǎng)PostAuthorize:方法調(diào)用,但是,如果表達式結(jié)果為 false 拋出異常/returnObject 可以獲取返回對象 useruser 屬性 username 是否和該方法的用戶對象的用戶名一樣。不一樣則拋出異常。PostAuthorize(&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論