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

下載本文檔

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

文檔簡介

Spring Security 安全權(quán)限管理手冊參考文獻(xiàn):1、security 權(quán)限管理手冊。2、spring 權(quán)限管理手冊3、spring 的相關(guān)資料。本文檔內(nèi)容僅僅作為公司權(quán)限管理資料用,對于企業(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是否可以對資源 R執(zhí)行M操作2、SS中的驗(yàn)證特點(diǎn)支持多種驗(yàn)證方式支持多種加密格式支持組件的擴(kuò)展和替換可以本地化輸出信息3、SS中的授權(quán)特點(diǎn)支持多種仲裁方式支持組件的擴(kuò)展和替換支持對頁面訪問、方法訪問、對象訪問的授權(quán)。4、SS核心安全實(shí)現(xiàn)Web安全通過配置ServletFilter 激活SS中的過濾器鏈實(shí)現(xiàn)Session一致性驗(yàn)證實(shí)現(xiàn)免登陸驗(yàn)證(Remember-Me驗(yàn)證)提供一系列標(biāo)簽庫進(jìn)行頁面元素的安全控制方法安全通過AOP模式實(shí)現(xiàn)安全代理Web安全與方法安全均可以使用表達(dá)式語言定義訪問規(guī)則5、配置SS配置,應(yīng)用安全過濾器配置Spring,驗(yàn)證與授權(quán)部分在web頁面中獲取用戶身份在web頁面中應(yīng)用安全標(biāo)簽庫實(shí)現(xiàn)方法級安全6、配置7、Spring配置文件中設(shè)置命名空間8、通過數(shù)據(jù)庫驗(yàn)證用戶身份9、完善web頁面驗(yàn)證規(guī)則10、自定義驗(yàn)證配置11、本地化消息輸出(國際化)根據(jù)公司項(xiàng)目的開發(fā)要求和集合spring功能,公司將通過數(shù)據(jù)庫進(jìn)行對用戶身份驗(yàn)證和授權(quán),系統(tǒng)將建立5個(gè)基礎(chǔ)表進(jìn)行對權(quán)利的管理。第一部分 數(shù)據(jù)庫設(shè)計(jì)1、表設(shè)計(jì)表1:用戶表(pub_users)序號字段類型含義備注1User_IdVchar(32)用戶idPK2user_accountVchar(30)登陸用戶名(登陸號)3User_nameVchar(40)用戶姓名4user_PasswordVchar(100)用戶密碼5EnabledInt是否被禁用0禁用1正常6isSysInt是否是超級用0非1是戶7user_DEScVchar(100)描述說明:pub_users表中的登錄名和密碼用來控制用戶的登錄。表2:權(quán)限表(pub_authorities)序號字段類型含義備注1authority_IdVchar(32)權(quán)限idPK2Authority_nameVchar(40)權(quán)限名稱3Authority_DEScVchar(100)權(quán)限描述4EnabledInt是否被禁用0禁用1正常5isSysInt是否是超級權(quán)0非1是限說明:pub_authorities 表中描述的是系統(tǒng)擁有哪些權(quán)限,如果要詳細(xì)分類,可以將一個(gè)url 定義一個(gè)權(quán)限,那樣就能對所有資源進(jìn)行管理。表3:角色表(pub_roles)序號字段類型含義備注1role_IdVchar(32)角色idPK2role_nameVchar(100)角色名稱3role_DEScVchar(100)角色描述4EnabledInt是否被禁用0禁用1正常5isSysInt是否是超級權(quán)0非1是限說明:pub_roles 表中描述的是系統(tǒng)按用戶分類或按照功能模塊分類,將系統(tǒng)進(jìn)行整合歸類管理。表4:資源表(pub_resources)序號字段類型含義備注1resource_IdVchar(32)資源idPK2resource_nameVchar(100)資源名稱3resource_typeVchar(40)資源類型url、method4priorityint資源優(yōu)先權(quán)即排序5resource_stringVchar(200)資源鏈接6resource_DEScVchar(100)資源描述7EnabledInt是否被禁用0禁用1正常8isSysInt是否是超級權(quán)0非1是限說明:pub_roles表中描述的是系統(tǒng)需要保護(hù)的資源及(url或方法)。以上四個(gè)表是權(quán)限管理的基礎(chǔ)表(用戶表、權(quán)限表、角色表、資源表)。表5:用戶角色連接表(pub_users_roles)序號字段類型含義備注1IdIndetityId主鍵PK2user_IdVchar(32)用戶id3role_idVchar(32)角色id說明:用來管理用戶和角色的關(guān)系。表6:角色權(quán)限連接表(pub_roles_authorities)序號字段類型含義備注1IdIndetityId主鍵PK2role_IdVchar(32)角色id3authority_IdVchar(32)權(quán)限id說明:用來管理角色和權(quán)限的關(guān)系。表7:權(quán)限資源連接表(pub_authorities_resources)序號字段類型含義備注1IdIndetityId主鍵PK2authority_IdVchar(32)權(quán)限id3resource_IdVchar(32)資源id說明:用來管理角色和權(quán)限的關(guān)系。2、建表語句如下(數(shù)據(jù)庫采用 MSSQL2000):createtablepub_users(user_idvarchar(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),enabledint,issysint);altertablepub_authoritiesaddconstraintpk_pub_authoritiesprimarykey(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),resource_namevarchar(100),resource_descvarchar(100),resource_typevarchar(40),resource_stringvarchar(200),priorityint,enabledint,issysint);altertablepub_resourcesaddconstraintpk_pub_resourcesprimarykey(resource_id);createtablepub_users_roles(idnumeric(12,0)IDENTITYNOTNULL,user_idvarchar(32),role_idvarchar(32),enabledint);altertablepub_users_rolesaddconstraintpk_pub_users_rolesprimarykey(id);alter table pub_users_roles add constraint fk_users_roles_userskey(user_id)referencespub_users(user_id);alter table pub_users_roles add constraint fk_users_roles_roles

foreignforeignkey(role_id)referencespub_roles(role_id);createtablepub_roles_authorities(idnumeric(12,0)IDENTITYNOTNULL,role_idvarchar(32),authority_idvarchar(32),enabledint);alter table pub_roles_authorities addconstraintkey(id);alter table pub_roles_authoritiesfk_pub_roles_authorities_authorities foreign

pk_pub_roles_authoritiesaddkey(authority_id)

primaryconstraintreferencespub_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),enabledint);altertablepub_authorities_resourcesaddconstraintpk_pub_authorities_resourcesprimarykey(id);altertablepub_authorities_resourcesaddconstraintfk_pub_authorities_resources_authoritiesforeignkey(authority_id)referencespub_authorities(authority_id);altertablepub_authorities_resourcesaddconstraintfk_pub_authorities_resources_resourcesforeignkey(resource_id)referencespub_resources(resource_id);3、E-R圖如下:第二部分WEB數(shù)據(jù)庫整合提示:相關(guān)代碼請參考項(xiàng)目模塊1、將數(shù)據(jù)庫表結(jié)構(gòu)和Hibernate建立映射,本系統(tǒng)采用annotation進(jìn)行對數(shù)據(jù)庫進(jìn)行零配置處理(請參考hibernate映射),如圖。2、建立權(quán)限的 Dao層。3、建立權(quán)限的 Service層4、配置<?xmlversion=encoding="UTF-8"?>""<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-param><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><!--SpringApplicationContext配置文件的路徑,可使用通配符,多個(gè)路徑用,號分隔此參數(shù)用于后面的SpringContextLoader--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/,classpath*:/</param-value></context-param><!--CharacterEncodingfilter--><filter><filter-name>encodingFilter</filter-name><filter-class></filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--SpringSide'sHibernateOpenSessionInViewfilter--><filter><filter-name>hibernateOpenSessionInViewFilter</filter-name><filter-class></filter-class><init-param><param-name>excludeSuffixs</param-name><param-value>js,css,jpg,gif</param-value></init-param></filter><filter-mapping><filter-name>hibernateOpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--SpringSecurityfilter--><filter><filter-name>springSecurityFilterChain</filter-name><filter-class></filter><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 ><filter-mapping ><filter-name >struts2Filter<url-pattern >/*</url-pattern</filter-mapping ><!--Spring 的ApplicationContext<listener ><listener-class ></listener-class

</filter-name>載入-->>

></listener ><listener ><listener-class

></listener-class

></listener ><!--Spring 刷新<listener ><listener-class

Introspector 防止內(nèi)存泄露></listener-class >

--></listener ><!-- 防止多人登陸<listener ><listener-class

,控制一個(gè)用戶只能登錄一次,不能在其他地方重新登錄>

--></listener-class ></listener ><!--session 超時(shí)定義,單位為分鐘 --><session-config ><session-timeout >20</session-timeout ></session-config ><welcome-file-list ><welcome-file ></welcome-file ></welcome-file-list ><!--error><error ><exception-type > <location >/common/</location</error ><error ><error-code >500</error-code ><location >/common/</location ></error ><error ><error-code >404</error-code ><location >/common/</location ></error ><error ><error-code >403</error-code >

><location

>/common/</location

></error ><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 >/WEB-INF/tlds/</taglib-location ></taglib ><taglib ><taglib-uri >/WEB-INF/</taglib-uri<taglib-location >/WEB-INF/tlds/</taglib ><taglib ><taglib-uri >/WEB-INF/</taglib-uri<taglib-location >/WEB-INF/tlds/</taglib ><taglib ><taglib-uri >/WEB-INF/</taglib-uri<taglib-location >/WEB-INF/tlds/</taglib ><!--loushangtld--><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 ><taglib-uri >/WEB-INF/</taglib-uri<taglib-location >/WEB-INF/tlds/</taglib-location ></taglib >

>>></taglib-location></taglib-location></taglib-location>>>

>>><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 ><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 ><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 ><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 >

>>>>>>>></taglib-location

><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 ><taglib-uri >/WEB-INF/</taglib-uri ><taglib-location >/WEB-INF/tlds/</taglib-location ></taglib ><!--loushangend --><taglib ><taglib-uri >/WEB-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 ="" encoding="UTF-8"?><beans:beans

xmlns=""xmlns:beans=""xmlns:xsi

=""xsi:schemaLocation<beans:description

=">SpringSecurity

"安全配置

></beans:description

><!--http

安全配置

--><http

auto-config

="true"

><intercept-url

pattern ="/css/**"

filters

="none"

/><intercept-url

pattern ="/images/**"

filters

="none"

/><intercept-url

pattern ="/js/**"

filters

="none"

/><intercept-url

pattern ="/"

filters

="none"

/><!--<intercept-urlpattern="/"access="ROLE_USER"/><intercept-urlpattern="/"access="ROLE_ADAMIN"/>--><form-loginlogin="/"default-target-url="/"authentication-failure-url=/>"/?error=1"<!--嘗試訪問沒有權(quán)限的頁面時(shí)跳轉(zhuǎn)的頁面--><access-denied-handlererror="/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_INTERCEPTOR之前--><custom-filterref="myFilter"before="FILTER_SECURITY_INTERCEPTOR"/></http><!--一個(gè)自定義的filter,必須包含authenticationManager,accessDecisionManager,securityMetadataSource三個(gè)屬性,我們的所有控制將在這三個(gè)類中實(shí)現(xiàn),解釋詳見具體配置--><beans:bean id="myFilter" class=""><beans:property name="authenticationManager"ref="authenticationManager"

/><beans:property

name="accessDecisionManager"ref="myAccessDecisionManagerBean" /><beans:property name="securityMetadataSource"ref="mySecurityMetadataSource" /></beans:bean><!-- 驗(yàn)證配置 ,認(rèn)證管理器,實(shí)現(xiàn)用戶認(rèn)證的入口,主要實(shí)現(xiàn) UserDetailsService<authentication-manager alias ="authenticationManager" ><authentication-provider user-service-ref ="userDetailsService" ><!--<s:password-encoderhash="sha"/>--></authentication-provider ></authentication-manager ><!-- 項(xiàng)目實(shí)現(xiàn)的用戶查詢服務(wù) ,將用戶信息查詢出來 --><beans:bean id="userDetailsService" class="" />

接口即可

--><!--

訪問決策器,決定某個(gè)用戶具有的角色,是否有足夠的權(quán)限去訪問某個(gè)資源

--><beans:bean id="myAccessDecisionManagerBean"class=""></beans:bean><!-- 資源源數(shù)據(jù)定義,將所有的資源和權(quán)限對應(yīng)關(guān)系建立起來,即定義某一資源可以被哪些角色訪問--><beans:bean id="mySecurityMetadataSource"class=""></beans:bean><!-- 定義國際化 --><beans:bean id="messageSource"class=""><beans:property name="basename"value="classpath:org/springframework/security/messages_zh_CN" /></beans:bean></beans:beans>第三部分 的實(shí)現(xiàn)這是項(xiàng)目的主體部分:這四個(gè)類說明如下。一、用來獲得用戶驗(yàn)證信息( MyUserDetailService )代碼如下:package 你就可以從數(shù)據(jù)庫中讀入用戶的密碼,角色信息,是否鎖定,賬號是否過期@ServicepublicclassMyUserDetailServiceimplementsUserDetailsService{@AutowiredprivatePubUsersDaopubUsersDao;@AutowiredprivatePubAuthoritiesResourcesDaopubAuthoritiesResourcesDao;publicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException,DataAccessException{Collection<GrantedAuthority>auths=newArrayList<GrantedAuthority>();et(0).getUserPassword();List<PubAuthoritiesResources>aaa=();Useruser=newUser(username,password,true,true,true,true,auths);returnuser;}}二、最核心的地方,就是提供某個(gè)資源對應(yīng)的權(quán)限定義,取得所有角色(數(shù)據(jù)(MyInvocationSecurityMetadataSourceService )

auth)的對應(yīng)資源代碼如下:package

**最核心的地方,就是提供某個(gè)資源對應(yīng)的權(quán)限定義,即getAttributes方法返回的結(jié)果。注意,我例子中使用的是AntUrlPathMatcher這個(gè)pathmatcher來檢查URL是否與資源定義匹配,* 事實(shí)上你還要用正則的方式來匹配,或者自己實(shí)現(xiàn)一個(gè) matcher。*此類在初始化時(shí),應(yīng)該取到所有資源及其對應(yīng)角色的定義*說明:對于方法的spring注入,只能在方法和成員變量里注入,如果一個(gè)類要進(jìn)行實(shí)例化的時(shí)候,不能注入對象和操作對象,所以在構(gòu)造函數(shù)里不能進(jìn)行操作注入的數(shù)據(jù)。*/@ServicepublicclassMyInvocationSecurityMetadataSourceServiceimplementsFilterInvocationSecurityMetadataSource{@AutowiredprivatePubAuthoritiesResourcesDaopubAuthoritiesResourcesDao;privateUrlMatcherurlMatcher=newAntUrlPathMatcher();privatestaticMap<String,Collection<ConfigAttribute>>resourceMap=null;publicMyInvocationSecurityMetadataSourceService(){loadResourceDefine();}/* privatevoidloadResourceDefine(){resourceMap =

new

HashMap<String,Collection<ConfigAttribute>>();Collection<ConfigAttribute>

atts

=

newArrayList<ConfigAttribute>();ConfigAttributeca=newSecurityConfig("ROLE_ADMIN");(ca);("/",atts);("/",atts);}*/privatevoidloadResourceDefine(){ApplicationContext

context

=

newClassPathXmlApplicationContext("");SessionFactory

sessionFactory

=(SessionFactory)("sessionFactory");Sessionsession=();List<String> query=("select

authority_name

from

pub_authorities").list();resourceMap=newHashMap<String,Collection<ConfigAttribute>>();Collection<ConfigAttribute>atts=newArrayList<ConfigAttribute>();ist();for(Stringres:query1){Stringurl=res

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論