SringSecurity安全權(quán)限管理手冊(cè)_第1頁
SringSecurity安全權(quán)限管理手冊(cè)_第2頁
SringSecurity安全權(quán)限管理手冊(cè)_第3頁
SringSecurity安全權(quán)限管理手冊(cè)_第4頁
SringSecurity安全權(quán)限管理手冊(cè)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、SpringSecurity安全權(quán)限管理手冊(cè)參考文獻(xiàn):1、 security權(quán)限管理手冊(cè)。2、 spring權(quán)限管理手冊(cè)3、 spring的相關(guān)資料。本文檔內(nèi)容僅僅作為公司權(quán)限管理資料用,對(duì)于企業(yè)來說,權(quán)限管理將是系統(tǒng)中的非常重要的一個(gè)模塊,權(quán)限的設(shè)計(jì)也是參考相關(guān)資料進(jìn)行整理和補(bǔ)充。系統(tǒng)將通過數(shù)據(jù)庫進(jìn)行管理用戶權(quán)限。權(quán)限管理搭建要的問題:1、區(qū)分Authentication(驗(yàn)證)與Authorization(授權(quán))驗(yàn)證這個(gè)用戶是誰?用戶身份可靠嗎?授權(quán)某用戶A是否可以訪問資源R某用戶A是否可以執(zhí)行M操作某用戶A是否可以對(duì)資源R執(zhí)行M操作2、SS中的驗(yàn)證特點(diǎn)支持多種驗(yàn)證方式支持多種加密格式支持

2、組件的擴(kuò)展和替換可以本地化輸出信息3、SS中的授權(quán)特點(diǎn)支持多種仲裁方式支持組件的擴(kuò)展和替換支持對(duì)頁面訪問、方法訪問、對(duì)象訪問的授權(quán)。4、SS核心安全實(shí)現(xiàn)Web$全通過配置ServletFilter激?5SS中的過濾器鏈實(shí)現(xiàn)Session一致性驗(yàn)證實(shí)現(xiàn)免登陸驗(yàn)證(Remember-M瞼證)提供一系列標(biāo)簽庫進(jìn)行頁面元素的安全控制方法安全通過AOP真式實(shí)現(xiàn)安全代理We似全與方法安全均可以使用表達(dá)式語言定義訪問規(guī)則5、配置SS配置,應(yīng)用安全過濾器配置Spring,驗(yàn)證與授權(quán)部分在web頁面中獲取用戶身份在web頁面中應(yīng)用安全標(biāo)簽庫實(shí)現(xiàn)方法級(jí)安全6、配置7、Spring配置文件中設(shè)置命名空間8、通過數(shù)據(jù)

3、庫驗(yàn)證用戶身份9、完善web頁面驗(yàn)證規(guī)則10、自定義驗(yàn)證配置11、本地化消息輸出(國際化)根據(jù)公司項(xiàng)目的開發(fā)要求和集合spring功能,公司將通過數(shù)據(jù)庫進(jìn)行對(duì)用戶身份驗(yàn)證和授權(quán),系統(tǒng)將建立5個(gè)基礎(chǔ)表進(jìn)行對(duì)權(quán)利的管理。第一部分?jǐn)?shù)據(jù)庫設(shè)計(jì)1、表設(shè)計(jì)表1:用戶表(pub_users)在舁廳P字段含義備注1User_IdVchar(32)用戶idPK2user_accountVchar(30)登陸用戶名(登卜科)3User_nameVchar(40)用戶姓名4user_PasswordVchar(100)用戶密碼5EnabledInt是否被禁用0禁用1正常6isSysInt是否是超級(jí)用戶0非1是7us

4、er_DEScVchar(100)描述說明:pub_users表中的登錄名和密碼用來控制用戶的登錄。表2:權(quán)限表(pub_authorities)廳P字段含義備注1authority_IdVchar(32)權(quán)限idPK2Authority_nameVchar(40)權(quán)限名稱3Authority_DEScVchar(100)權(quán)限描述4EnabledInt是否被禁用0禁用1正常5isSysInt是否是超級(jí)權(quán)限0非1是說明:pub_authorities表中描述的是系統(tǒng)擁啟哪些權(quán)限,如果要詳細(xì)分類,可小t一個(gè)url定義一個(gè)權(quán)限,那樣就能對(duì)所有資源進(jìn)行管理。表3:角色表(pub_roles)廳P字段含

5、義備注1role_IdVchar(32)角色idPK2role_nameVchar(100)角色名稱3role_DEScVchar(100)角色描述4EnabledIntr是否被禁用0禁用1正常5isSysInt是否是超級(jí)權(quán)限0非1是說明:pub_roles表中描述的是系統(tǒng)按用戶分類或按照功能模塊分類,將系統(tǒng)進(jìn)行整合歸類管理。表4:資源表(pub_resources)在舁廳P字段含義備注1resourceIdVchar(32)f資源idPK2resource_nameVchar(100)資源名稱3resource_typeVchar(40)資源類型url、method4priorityint資

6、源優(yōu)先權(quán)即排序5resource_stringVchar(200)資源鏈接6resource_DEScVchar(100)資源描述7EnabledInt是否被禁用0禁用1正常8isSysInt是否是超級(jí)權(quán)限0非1是說明:pub_roles表中描述的是系統(tǒng)需要保護(hù)的負(fù)源及(url或方法)。以上四個(gè)表是權(quán)限管理的基礎(chǔ)表(用戶表、權(quán)限表、角色表、資源表)表5:用戶角色連接表(pub_users_roles)在舁廳P字段類型含義備注1IdIndetityId主鍵PK2user_IdVchar(32)用戶id3role_idVchar(32)角色id說明:用來管理用戶和角色的關(guān)系。表6:角色權(quán)限連接表(

7、pub_roles_authorities)在舁廳p字段類型含義備注1IdIndetityId主鍵PK2role_IdVchar(32)角色id3authority_IdVchar(32)權(quán)限id說明:用來管理角色和權(quán)限的關(guān)系。表7:權(quán)限資源連接表(pub_authorities_resources)在舁廳p字段含義備注1IdIndetityId主鍵PK2authority_IdVchar(32)權(quán)限id3resource_IdVchar(32)資源id說明:用來管理角色和權(quán)限的關(guān)系。2、建表語句如下(數(shù)據(jù)庫采用MSSQL2000:createtablepub_users(user_idvar

8、char(32),user_accountvarchar(30),user_namevarchar(40),user_passwordvarchar(100),user_descvarchar(100),enabledint,issysint);altertablepub_usersaddconstraintpk_pub_usersprimarykey(user_id);createtablepub_authorities(authority_idvarchar(32),authority_namevarchar(40),authority_descvarchar(100),enabledin

9、t,issysint);altertablepub_authoritiesaddconstraintpk_pub_authoritieskey(authority_id);createtablepub_roles(role_idvarchar(32),role_namevarchar(40),role_descvarchar(100),enabledint,issysint);altertablepub_rolesaddconstraintpk_pub_rolesprimarykey(role_id);createtablepub_resources(resource_idvarchar(32

10、),resource_namevarchar(100),resource_descvarchar(100),resource_typevarchar(40),resource_stringvarchar(200),priorityint,enabledint,issysint);altertablepub_resourcesaddconstraintpk_pub_resourceskey(resource_id);createtablepub_users_roles(idnumeric(12,0)IDENTITYNOTNULL,user_idvarchar(32),role_idvarchar

11、(32),enabledint);altertablepub_users_rolesaddconstraintpk_pub_users_rolesprimarykey(id);altertablepub_users_rolesaddconstraintfk_users_roles_userskey(user_id)referencespub_users(user_id);altertablepub_users_rolesaddconstraintfk_users_roles_roleskey(role_id)referencespub_roles(role_id);createtablepub

12、_roles_authorities(idnumeric(12,0)IDENTITYNOTNULL,role_idvarchar(32),authority_idvarchar(32),enabledint);altertablepub_roles_authoritiesaddconstraintpk_pub_roles_authoritieskey(id);altertablepub_roles_authoritiesaddfk_pub_roles_authorities_authoritiesforeignkey(authority_id)primaryprimaryforeignfore

13、ignprimaryconstraint referencespub_authorities(authority_id);altertablepub_roles_authoritiesaddconstraintfk_pub_roles_authorities_rolesforeignkey(role_id)referencespub_roles(role_id);createtablepub_authorities_resources(idnumeric(12,0)IDENTITYNOTNULL,authority_idvarchar(32),resource_idvarchar(32),en

14、abledint);pk_pub_authorities_resourcesaltertablepub_authorities_resourcesaddconstraintprimarykey(id);constraint referencesconstraint referencesaltertablepub_authorities_resourcesaddfk_pub_authorities_resources_authoritiesforeignkey(authority_id)pub_authorities(authority_id);altertablepub_authorities

15、_resourcesaddfk_pub_authorities_resources_resourcesforeignkey(resource_id)pub_resources(resource_id);3、E-R圖如下:第二部分WEB數(shù)據(jù)庫整合提示:相關(guān)代碼請(qǐng)參考項(xiàng)目模塊1、將數(shù)據(jù)庫表結(jié)構(gòu)和Hibernate建立映射,本系統(tǒng)采用annotation進(jìn)行對(duì)數(shù)據(jù)庫進(jìn)行零配置處理(請(qǐng)參考hibernate映射),如圖。2、建立權(quán)限的Dao層。3、建立權(quán)限的Service層4、配置<?xmlversion=""encoding="UTF-8"?>&l

16、t;web-appversion=""xmlns=""xmlns:xsi=""xsi:schemaLocation=""><display-name>rstframe</display-name><context-param><param-name>webAppRootKey</param-name><param-value></param-value>< /context-param><context-pa

17、ram><param-name>log4jConfigLocation</param-name><param-value>classpath:</param-value>< /context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value>< /context-param>< !-SpringApplica

18、tionContext配置文件的路徑,可使用通配符,多個(gè)路徑用,號(hào)分隔此參數(shù)用于后面的SpringContextLoader-><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/,classpath*:/</param-value></context-param><!-CharacterEncodingfilter-><filter><filter-name>e

19、ncodingFilter</filter-name>filter-class</filter-class><init-paramparam-name>encoding</param-name><param-value>UTF-8</param-value></init-param</filter><filter-mapping<filter-name>encodingFilter</filter-name><url-pattern</filter-mapping

20、>/*</url-pattern><!-SpringSide'sHibernateOpenSessionInViewfilter-<filter>filter-name>hibernateOpenSessionInViewFilter</filter-namefilter-class</filter-class><init-paramparam-name>excludeSuffixs</param-name><param-value>js,css,jpg,gif</param-valu

21、e</init-param</filter>filter-mappingfilter-name<url-pattern>hibernateOpenSessionInViewFilter>/* </ url-pattern ></ filter-name</filter-mapping<!-SpringSecurityfilter-><filter>filter-namefilter-class>springSecurityFilterChain></ filter ></ filt

22、er-name ><filter-mapping<filter-name>springSecurityFilterChain</ filter-name ><url-pattern>/* </ url-pattern</filter-mapping<!-Struts2filter,actionPackages-><filter><filter-name>struts2Filter</filter-name<filter-class</filter-class</filter&

23、gt;<filter-mapping><filter-name>struts2Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-Spring的Applicationcontext載入-><listener><listener-class></listener-class></listener><listener><listener-class></

24、listener-class></listener><!-Spring刷新Introspector防止內(nèi)存泄露-><listener><listener-class></listener-class></listener>-><!-防止多人登陸,控制一個(gè)用戶只能登錄一次,不能在其他地方重新登錄<listener><listener-class></listener-class></listener><!-session超時(shí)定義,單位為分鐘->&l

25、t;session-config><session-timeout>20</session-timeout></session-config><welcome-file-list<welcome-file</ welcome-file-list<!- error page -><error-page >>></ welcome-file >><exception-type ><location>/common/</location</error-

26、page><error-page><error-code>500</error-code><location>/common/</location></error-page><error-page><error-code>404</error-code><location>/common/</location></error-page><error-page><error-code>403</error-code&g

27、t;<location>/common/</location></error-page><jsp-config><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/

28、WEB-INF/tlds/</taglib-location>< /taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri>>/WEB-INF/tlds/ </ taglib-location<taglib-location< /taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-loc

29、ation< /taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location</taglib><!-loushangtld-><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location><

30、/taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location<taglib><taglib-uri>/WEB

31、-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><

32、taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/

33、tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location>

34、;</taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location<taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>

35、;/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><taglib><taglib-uri>/WEB-INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib><!-loushangend-><taglib><taglib-uri>/WEB-

36、INF/</taglib-uri><taglib-location>/WEB-INF/tlds/</taglib-location></taglib></jsp-config><mime-mapping>extension>rar</extension><mime-type>application/rar</mime-type></mime-mapping></web-app>5、配置spring中的xml文件<?xmlversion="&q

37、uot;encoding="UTF-8"?><beans:beansxmlns=""xmlns:beans=""xmlns:xsi=""xsi:schemaLocation=""><beans:description>SpringSecurity安全配置</beans:description<!-http安全配置-><httpauto-config="true"><intercept-urlpattern=&q

38、uot;/css/*"filters="none"/><intercept-urlpattern="/images/*"filters="none"/><intercept-urlpattern="/js/*"filters="none"/><intercept-urlpattern="/"filters="none"/><!-<intercept-urlpattern="/&quo

39、t;access="ROLE_USER"/><intercept-urlpattern="/"access="ROLE_ADAMIN"/>-><form-loginlogin-page="/"default-target-url="/"authentication-failure-url="/?error=1"/><!-嘗試訪問沒有權(quán)限的頁面時(shí)跳轉(zhuǎn)的頁面-><access-denied-handlererror-page=

40、"/common/"/><logoutlogout-success-url="/"/>session-management>concurrency-controlmax-sessions="1"error-if-maximum-exceeded="true"/></session-management><!-增加一個(gè)filter,這點(diǎn)與Acegi是不一樣的,不能修改默認(rèn)的filter了,這個(gè)filter位于FILTER_SECURITY_INTERCEPTOM->

41、;custom-filterref="myFilter"before="FILTER_SECURITY_INTERCEPTOR”</http><!-一個(gè)自定義的filter,必須包含authenticationManager,accessDecisionManager,securityMetadataSource三個(gè)屬性,我們的所有控制將在這三個(gè)類中實(shí)現(xiàn),解釋詳見具體配置-><beans:beanid="myFilter"class=""><beans:propertyname=&q

42、uot;authenticationManager"ref="authenticationManager"/><beans:propertyname="accessDecisionManager"ref="myAccessDecisionManagerBean"/><beans:propertyname="securityMetadataSource"ref="mySecurityMetadataSource"/></beans:bean>&l

43、t;!-驗(yàn)證配置,認(rèn)證管理器,實(shí)現(xiàn)用戶認(rèn)證的入口,主要實(shí)現(xiàn)UserDetailsService接口即可->authentication-manageralias="authenticationManager">authentication-provideruser-service-ref="userDetailsService"><!-s:password-encoderhash="sha"/>-></authentication-provider></authentication

44、-manager><!-項(xiàng)目實(shí)現(xiàn)的用戶查詢服務(wù),將用戶信息查詢出來->beans:beanid="userDetailsService"class=""/><!-訪問決策器,決定某個(gè)用戶具有的角色,是否有足夠的權(quán)限去訪問某個(gè)資源->beans:beanid="myAccessDecisionManagerBean"class=""></beans:bean><!-資源源數(shù)據(jù)定義,將所有的資源和權(quán)限對(duì)應(yīng)關(guān)系建立起來,即定義某一資源可以被哪些角色訪問->

45、beans:beanid="mySecurityMetadataSource"class=""></beans:bean><!-定義國際化-><beans:beanid="messageSource"class=""><beans:propertyname="basename"value="classpath:org/springframework/security/messages_zh_CN"/></beans:

46、bean></beans:beans>第三部分的實(shí)現(xiàn)這是項(xiàng)目的主體部分:這四個(gè)類說明如下。MyUserDetailService )一、用來獲得用戶驗(yàn)證信息代碼如下:package期你就可以從數(shù)據(jù)庫中讀入用戶的密碼,角色信息,是否鎖定,賬號(hào)是否過ServicepublicclassMyUserDetailServiceimplementsUserDetailsServiceAutowiredprivatePubUsersDaopubUsersDao;AutowiredprivatePubAuthoritiesResourcesDaopubAuthoritiesResource

47、sDao;publicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException,DataAccessExceptionCollection<GrantedAuthority>auths=newArrayList<GrantedAuthority>();et(0).getUserPassword();List<PubAuthoritiesResources>aaa=();Useruser=newUser(username,password,true,true,tru

48、e,true,auths);returnuser;、最核心的地方,就是提供某個(gè)資源對(duì)應(yīng)的權(quán)限定義,取得所有角色(auth)的對(duì)應(yīng)資源數(shù)據(jù)(MyInvocationSecurityMetadataSourceService代碼如下:package* 最核心的地方,就是提供某個(gè)資源對(duì)應(yīng)的權(quán)限定義,即getAttributes方法返回的結(jié)果。* 注意,我例子中使用的是AntUrlPathMatcher這個(gè)pathmatcher來檢查URL!否與資源定義匹配,* 事實(shí)上你還要用正則的方式來匹配,或者自己實(shí)現(xiàn)一個(gè)matcher。* 此類在初始化時(shí),應(yīng)該取到所有資源及其對(duì)應(yīng)角色的定義* 說明:對(duì)于方法的s

49、pring注入,只能在方法和成員變量里注入,* 如果一個(gè)類要進(jìn)行實(shí)例化的時(shí)候,不能注入對(duì)象和操作對(duì)象,* 所以在構(gòu)造函數(shù)里不能進(jìn)行操作注入的數(shù)據(jù)。*/ServicepublicclassMyInvocationSecurityMetadataSourceServiceimplementsFilterInvocationSecurityMetadataSourceAutowiredprivatePubAuthoritiesResourcesDaopubAuthoritiesResourcesDao;privateUrlMatcherurlMatcher=newAntUrlPathMatcher(

50、);privatestaticMap<String,Collection<ConfigAttribute>>resourceMap=null;publicMyInvocationSecurityMetadataSourceService()loadResourceDefine();/*privatevoidloadResourceDefine()resourceMap=newHashMap<String,Collection<ConfigAttribute>>();Collection<ConfigAttribute>atts=new

51、ArrayList<ConfigAttribute>();ConfigAttributeca=newSecurityConfig("ROLE_ADMIN");(ca);("/",atts);("/",atts);*/private void loadResourceDefine() ApplicationContextClassPathXmlApplicationContext("");SessionFactory(SessionFactory)("sessionFactory");Session session = ();List<String> query=("selectcont

溫馨提示

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

評(píng)論

0/150

提交評(píng)論