版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、spring security 原理使用眾多的攔截器對 uri攔截,以此來管理權限,是spring security 核心思想。對一般來說,我們的Filter都是配置在 web.xml 中,但是spring security不一樣,它在web.xml中配置的只是一個代理,而真正起作用的Filter是作為Bean配置在Spring中的。web.xml中的代理依次調用這些Bean,就實現(xiàn)了對 Web資源的保護,同時這些Filter作為Bean被Spring 管理,所以實現(xiàn) AOP也很簡單,真的是一舉兩得啊。spring security中提供的Filter不少,有十多個,一個一個學起來比較復雜。但
2、是對于我們Web開發(fā)者來說,常用的就那么幾個,如下圖中的被紅圈圈標記出來的:Filter Class2 J.E工 口口目mConcurrentS5 a sianPiIter七m己仁七Pru以u七huntica七金dPrQE2字EngFEJ.七七工SubclassesSecuntyCoDteKtHcldeiAwaieRe quest Fil terAnonymoLisFrocessingFiLterExceptionTxanslationFilterNtlmFrocessingFilterEj.lterSecuritylEiterceptQr J三:二七二 serTr 3C2Bsr.gFzLer
3、 從上到下,它們實現(xiàn)的功能依次是1、制定必須為https連接;2、從Session中提取用戶的認證信息;3、退出登錄;4、登錄;5、記住用戶;6、所有的應用必須配置這個Filter。一般來說,我們寫 Web應用只需要熟悉這幾個 Filter就可以了,如果不需要 https連接, 連第一個也不用熟悉。但是有人肯定會想,這些Filter怎么和我的數(shù)據庫聯(lián)系起來呢?不用 著急,這些Filter并不直接處理用戶的認證,也不直接處理用戶的授權,而是把它們交給了認證管理器和決策管理器。如下圖:對于這兩種管理器,那也是不需要我們寫代碼的,spring security也提供了現(xiàn)成的類。那么大家又奇怪了:又是
4、現(xiàn)成的,那怎么和我的數(shù)據庫關聯(lián)起來呢?別著急,其實這兩個管理器自己也不做事,認證管理器把任務交給了Provider,而決策管理器則把任務交給了Voter ,如下圖:現(xiàn)在我要告訴你們,這里的Provider和Voter也是不需要我們寫代碼的。不要崩潰,快到目標了。spring security 提供了多個Provider的實現(xiàn)類,如果我們想用數(shù)據庫來儲存用戶的認證數(shù)據,那么我們就選擇DaoAuthenticationProvider 。對于Voter ,我們一般選擇RoleVoter就夠用了,它會根據我們配置文件中的設置來決定是否允許某一個用戶訪問 制定的Web資源。而DaoAuthentica
5、tionProvider也是不直接操作數(shù)據庫的,它把任務委托給了UserDetailService ,如下圖:認證管理器AuthenticatioManager而我們要做的,就是實現(xiàn)這個UserDetailService 。圖畫得不好,大家不要見笑,但是說了這么多總算是引出了我們開發(fā)中的關鍵,那就是我們要實現(xiàn)自己的UserDetailService ,它就是連接我們的數(shù)據庫和spring security的橋梁。UserDetailService的要求也很簡單,只需H|一一個返回 org.springframework.security.userdetails.User對象的loadUserB
6、yUsername(String userName)方法。因此,怎么設計數(shù)據庫都可以,不管我們是用一個表還是兩個表還是三個表,也不管我們是用戶-授權,還是用戶-角色-授權,還是用戶-用戶組-角色-授權,這些具體的東西spring security統(tǒng)統(tǒng)不關心,它只關心返回的那個User對象,至于怎么從數(shù)據庫中讀取數(shù)據,那就是我們自己的事了。反過來再看看上面的過程,我們發(fā)現(xiàn),即使我們要做的只是實現(xiàn)自己的UserDetailService類,但是我們不得不在 Spring中配置那一大堆的 Bean,包括幾個Filter ,幾個Manager , 幾個Provider和Voter ,而這些配置往往都是
7、重復的無謂的。好在 Acegi 2.0 也認識到了 這個問題,所以,它設計了一個 <http> 標簽,讓spring security的配置得到了簡化。下面是spring security中的配置的截圖,大家可以看看:卜圖是官方文章中的傳統(tǒng)Filter設置和<http>元素之間的對應關系:二二。nnuL 二二匚匚 u -日工 n 孑 SiJLtuukos3 n l工工二u 二HrTrpSe 3Jic ftCOTteKt I dt egratiaiaFi lee r75:?sjxe.二 1 andr rc 突學日LgFl 18fJLb£ ktrrwJi'
8、jtnaa.tic* td?£«««i i «-£ SlJbcllHB4it1a 3&二 U ;ES3 z'xL tAc±h.=-7it 工由 mt j. znFTOse-3 - izi gFz Ite-rHrt jl?Frrnf saingFi Itpr5v5ijfltj-CefiteHt!1olcitfE.AvirReqdiest.Fller豆EIE二tw二型型E工二二三三三工.-!. :_ E:c x m 箏工叫 E* Lt «£ExeepicnTraES1atienTilrerSl
9、tLMProcj&ssitigPilwrFl Lter.SaltyrntercptorSuit cW- P=二二= f BLikgFil w £ameipaw Oenent or Altribite二七 tp |' J-Et cr 二up二 - Lizl-ht tp/ gn :吐 工餐nt- mu與ninn-匚口 at cqLhrtphttp./loeput0t*/jcS(9NA陽小http/f orzn-1 口弓二 Hi叮 / htrp-feaai Gi v 1* t-Hpl-p re v 1 s ionZit tp.,二q工?H- e二-mshttp/htpN/A
10、0ttpW&下面的代碼是 spring security 中實現(xiàn) UserDetailService 的范例,在 spring security 的范例中,白衣使用了三個表User、Role、Authority 。但是spring security不關心你用了幾個表,它只關心UserDetails 對象。而決定用戶能否訪問指定Web資源的,是RoleVoter類,無需任何修改它可以工作得很好,唯一的缺點是它只認 ROLE_前綴,所以 搞得白衣的Authority看起來都象角色,不倫不類。package personal.youxia.service.security;import ja
11、va.util.ArrayList;import java.util.List;import org.springframework.beans.factory.annotation.Required;import org.springframework.dao.DataAccessException;import org.springframework.security.GrantedAuthority;import org.springframework.security.GrantedAuthoritylmpl;import org.springframework.security.us
12、erdetails.UserDetails;import org.springframework.security.userdetails.UserDetailsService;import org.springframework.security.userdetails.UsernameNotFoundException;import personal.youxia.entity.user.Authority;import personal.youxia.entity.user.Role;import personal.youxia.entity.user.User;import perso
13、nal.youxia.service.user.UserManager;/* 實現(xiàn) SpringSecurity 的 UserDetailsService 接口,獲取用戶 Detail 信息.* author calvin* /public class UserDetailServicelmpl implements UserDetailsService private UserManager userManager;public UserDetails loadUserByUsername(String userName)throwsUsernameNotFoundException, Da
14、taAccessException User user = userManager.getUserByLoginName(userName);if (user = null ) throw new UsernameNotFoundException(userName + "不存在)List<GrantedAuthority> authsList =new ArrayList<GrantedAuthority>();for (Role role : user.getRoles() for (Authority authority : role.getAuths(
15、) authsList.add(newGrantedAuthorityImpl(authority.getName(); / 目前在 MultiDatabaseExample 的 User 類中沒有 enabled, accountNonExpired,credentialsNonExpired, accountNonLocked等屬性/ 暫時全部設為true,在需要時才添加這些屬性 .org.springframework.security.userdetails.User userdetail =neworg.springframework.security.userdetails.User(true , true , true , trueuser.getLoginName(), user.getPassword(),authsList.toArray(new GrantedAuthorityauthsList.size();return userdetail; Requiredpublic void setUserManager(UserManager userManager) this .userManager = userManager; |電 最后再來說說這個命名的問題,我對 Authentication 和Auth
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度出租車行業(yè)節(jié)能減排技術創(chuàng)新合同4篇
- 二零二五年度充電樁儲能系統(tǒng)設計與建設合同3篇
- 2025秀嶼區(qū)文印中心企業(yè)宣傳冊制作承包經營合同3篇
- 2025版外墻瓷磚購銷及質量檢測認證合同3篇
- 二零二五年度家暴受害者離婚財產合理分配與子女權益保護合同
- 臨時土地使用租賃合同(2024版)
- 2025年度智能化煤炭采購合同書4篇
- 二零二五年度農民工社會保險委托代繳服務協(xié)議
- 二零二五年度變壓器安裝與電網運行維護合同6篇
- 2025年度美容院連鎖加盟經營管理合同
- 智能衣服方案
- 李克勤紅日標準粵語注音歌詞
- 教科版六年級下冊科學第一單元《小小工程師》教材分析及全部教案(定稿;共7課時)
- 中藥材產地加工技術規(guī)程 第1部分:黃草烏
- 危險化學品經營單位安全生產考試題庫
- 案例分析:美國紐約高樓防火設計課件
- 老客戶維護方案
- 移動商務內容運營(吳洪貴)任務一 用戶定位與選題
- 2021年高考化學真題和模擬題分類匯編專題20工業(yè)流程題含解析
- 工作證明模板下載免費
- (完整word)長沙胡博士工作室公益發(fā)布新加坡SM2考試物理全真模擬試卷(附答案解析)
評論
0/150
提交評論