![SpringSecurity3.x完整入門教程_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/57f50827-e215-42a0-934c-58ef06df099e/57f50827-e215-42a0-934c-58ef06df099e1.gif)
![SpringSecurity3.x完整入門教程_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/57f50827-e215-42a0-934c-58ef06df099e/57f50827-e215-42a0-934c-58ef06df099e2.gif)
![SpringSecurity3.x完整入門教程_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/57f50827-e215-42a0-934c-58ef06df099e/57f50827-e215-42a0-934c-58ef06df099e3.gif)
![SpringSecurity3.x完整入門教程_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/57f50827-e215-42a0-934c-58ef06df099e/57f50827-e215-42a0-934c-58ef06df099e4.gif)
![SpringSecurity3.x完整入門教程_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/57f50827-e215-42a0-934c-58ef06df099e/57f50827-e215-42a0-934c-58ef06df099e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Spring Security 3.x 出來一段時間了,跟Acegi是大不同了,與2.x的版本也有一些小小的區(qū)別,網(wǎng)上有一些文檔,也有人翻譯Spring Security 3.x的guide,但通過閱讀guide,無法馬上就能很容易的實現(xiàn)一個完整的實例。我花了點兒時間,根據(jù)以前的實戰(zhàn)經(jīng)驗,整理了一份完整的入門教程,供需要的朋友們參考。1,建一個web project,并導(dǎo)入所有需要的lib,這步就不多講了。2,配置web.xml,使用Spring的機制裝載: contextConfigLocation classpath:applicationContext*.xml org.springfr
2、amework.web.context.ContextLoaderListener springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* login.jsp 這個文件中的內(nèi)容我相信大家都很熟悉了,不再多說了。2,來看看applicationContext-security.xml這個配置文件,關(guān)于Spring Security的配置均在其中: !- 如果用戶的密碼采用加密的話,可以加點“鹽” - 3,來看看自定義filter的實現(xiàn):p
3、ackage com.robin.erp.fwk.security;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.springframework.securi
4、ty.access.SecurityMetadataSource;import ercept.AbstractSecurityInterceptor;import ercept.InterceptorStatusToken;import org.springframework.security.web.FilterInvocation;import erc
5、ept.FilterInvocationSecurityMetadataSource;public class MyFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter private FilterInvocationSecurityMetadataSource securityMetadataSource; / Methods / = /* * Method that is actually called by the filter chain. Simply delegates to
6、* the link #invoke(FilterInvocation) method. * * param request * the servlet request * param response * the servlet response * param chain * the filter chain * * throws IOException * if the filter chain fails * throws ServletException * if the filter chain fails */ public void doFilter(ServletReques
7、t request, ServletResponse response, FilterChain chain) throws IOException, ServletException FilterInvocation fi = new FilterInvocation(request, response, chain); invoke(fi); public FilterInvocationSecurityMetadataSource getSecurityMetadataSource() return this.securityMetadataSource; public Class ge
8、tSecureObjectClass() return FilterInvocation.class; public void invoke(FilterInvocation fi) throws IOException, ServletException InterceptorStatusToken token = super.beforeInvocation(fi); try fi.getChain().doFilter(fi.getRequest(), fi.getResponse(); finally super.afterInvocation(token, null); public
9、 SecurityMetadataSource obtainSecurityMetadataSource() return this.securityMetadataSource; public void setSecurityMetadataSource( FilterInvocationSecurityMetadataSource newSource) this.securityMetadataSource = newSource; Override public void destroy() Override public void init(FilterConfig arg0) thr
10、ows ServletException 最核心的代碼就是invoke方法中的InterceptorStatusToken token = super.beforeInvocation(fi);這一句,即在執(zhí)行doFilter之前,進行權(quán)限的檢查,而具體的實現(xiàn)已經(jīng)交給accessDecisionManager了,下文中會講述。4,來看看authentication-provider的實現(xiàn):package com.robin.erp.fwk.security;import java.util.ArrayList;import java.util.Collection;import org.spr
11、ingframework.dao.DataAccessException;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.authority.GrantedAuthorityImpl;import org.springframework.security.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetails;import org
12、.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.core.userdetails.UsernameNotFoundException;public class MyUserDetailService implements UserDetailsService Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
13、, DataAccessException Collection auths=new ArrayList(); GrantedAuthorityImpl auth2=new GrantedAuthorityImpl(ROLE_ADMIN); auths.add(auth2); if(username.equals(robin1) auths=new ArrayList(); GrantedAuthorityImpl auth1=new GrantedAuthorityImpl(ROLE_ROBIN); auths.add(auth1); / User(String username, Stri
14、ng password, boolean enabled, boolean accountNonExpired,/ boolean credentialsNonExpired, boolean accountNonLocked, Collection authorities) User user = new User(username, robin, true, true, true, true, auths); return user; 在這個類中,你就可以從數(shù)據(jù)庫中讀入用戶的密碼,角色信息,是否鎖定,賬號是否過期等,我想這么簡單的代碼就不再多解釋了。5,對于資源的訪問權(quán)限的定義,我們通過實
15、現(xiàn)FilterInvocationSecurityMetadataSource這個接口來初始化數(shù)據(jù)。package com.robin.erp.fwk.security;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.springframework.security.access.ConfigAttribute;import org.springframework.se
16、curity.access.SecurityConfig;import org.springframework.security.web.FilterInvocation;import ercept.FilterInvocationSecurityMetadataSource;import org.springframework.security.web.util.AntUrlPathMatcher;import org.springframework.security.web.util.UrlMatcher
17、;/* * * 此類在初始化時,應(yīng)該取到所有資源及其對應(yīng)角色的定義 * * author Robin * */public class MyInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource private UrlMatcher urlMatcher = new AntUrlPathMatcher(); private static MapString, Collection resourceMap = null; public MyInvocationSecurityMetada
18、taSource() loadResourceDefine(); private void loadResourceDefine() resourceMap = new HashMapString, Collection(); Collection atts = new ArrayList(); ConfigAttribute ca = new SecurityConfig(ROLE_ADMIN); atts.add(ca); resourceMap.put(/index.jsp, atts); resourceMap.put(/i.jsp, atts); / According to a U
19、RL, Find out permission configuration of this URL. public Collection getAttributes(Object object) throws IllegalArgumentException / guess object is a URL. String url = (FilterInvocation)object).getRequestUrl(); Iterator ite = resourceMap.keySet().iterator(); while (ite.hasNext() String resURL = ite.
20、next(); if (urlMatcher.pathMatchesUrl(resURL, url) return resourceMap.get(resURL); return null; public boolean supports(Class clazz) return true; public Collection getAllConfigAttributes() return null; 看看loadResourceDefine方法,我在這里,假定index.jsp和i.jsp這兩個資源,需要ROLE_ADMIN角色的用戶才能訪問。這個類中,還有一個最核心的地方,就是提供某個資源對
21、應(yīng)的權(quán)限定義,即getAttributes方法返回的結(jié)果。注意,我例子中使用的是AntUrlPathMatcher這個path matcher來檢查URL是否與資源定義匹配,事實上你還要用正則的方式來匹配,或者自己實現(xiàn)一個matcher。6,剩下的就是最終的決策了,make a decision,其實也很容易,呵呵。package com.robin.erp.fwk.security;import java.util.Collection;import java.util.Iterator;import org.springframework.security.access.AccessDec
22、isionManager;import org.springframework.security.access.AccessDeniedException;import org.springframework.security.access.ConfigAttribute;import org.springframework.security.access.SecurityConfig;import org.springframework.security.authentication.InsufficientAuthenticationException;import org.springf
23、ramework.security.core.Authentication;import org.springframework.security.core.GrantedAuthority;public class MyAccessDecisionManager implements AccessDecisionManager /In this method, need to compare authentication with configAttributes. / 1, A object is a URL, a filter was find permission configuration by this URL, and pass to here. / 2, Check authentication has attribute in permission configuration (configAttributes) / 3, If not match corresponding authentication, throw a AccessDeniedException. public void decide(Authentication authentication, Object obje
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公環(huán)境下的健康與舒適
- 未來的工作環(huán)境科技與舒適性的平衡
- 現(xiàn)代辦公環(huán)境下的智能配送技術(shù)應(yīng)用實例
- 2024秋七年級數(shù)學(xué)上冊 第4章 一元一次方程4.2 解一元一次方程 3用合并同類項法解方程說課稿(新版)蘇科版001
- Unit 4 History And Traditions Reading for Writing 說課稿-2023-2024學(xué)年高中英語人教版(2019)必修第二冊
- Unit 4 Friends Forever Understanding ideas click for a friend 說課稿-2024-2025學(xué)年高中英語外研版必修第一冊
- 2024年五年級英語下冊 Unit 2 How do you come to school第1課時說課稿 譯林牛津版
- 6 魯濱遜漂流記(節(jié)選)(說課稿)-2023-2024學(xué)年語文六年級下冊統(tǒng)編版
- 16《夏天里的成長》(說課稿)2024-2025學(xué)年部編版語文六年級上冊001
- Unit 2 Wildlife Protection Reading and Thinking Language Focus 說課稿-2024-2025學(xué)年高一上學(xué)期英語人教版(2019)必修第二冊001
- 寧德時代筆試題庫
- 五年級下冊北京版英語單詞
- 康復(fù)醫(yī)院患者隱私保護管理制度
- 新課標(biāo)I、Ⅱ卷 (2024-2020) 近五年高考英語真題滿分作文
- 浙江省嘉興市2023-2024學(xué)年六年級(上)期末數(shù)學(xué)試卷
- 子宮脫垂手術(shù)指南
- 沈陽理工大學(xué)《數(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- DB41T 2231-2022 水利工程生態(tài)護坡技術(shù)規(guī)范
- 共享單車安全知識
- 渤海大學(xué)《大數(shù)據(jù)分析與實踐》2023-2024學(xué)年期末試卷
- 2024版2024年《咚咚鏘》中班音樂教案
評論
0/150
提交評論