版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、spring security 3.0 安全權限管理手冊參考文獻:1、中的spring security權限管理手冊。2、spring security3.0權限管理手冊3、spring的相關資料。本文檔內容僅作為公司權限管理資料用,對于企業(yè)來說,權限管理將是系統(tǒng)中的非常重要的一個模塊,權限的設計也是參考相關資料進行整理和補充。系統(tǒng)將通過數(shù)據(jù)庫進行管理用戶權限。權限管理搭建要的問題:1、區(qū)分authentication(驗證)和 authorization(授權)驗證這個用戶是誰?用戶身份可靠嗎?授權某用戶a是否可以訪問資源r某用戶a是否可以執(zhí)行m操作某用戶a是否可以對資源r執(zhí)行m操作2、ss
2、中的驗證特點支持多種驗證方式支持多種加密格式支持組件的擴展和替換可以本地化輸出信息3、ss中的授權特點支持多種仲裁方式支持組件的擴展和替換支持對頁面訪問、方法訪問、對象訪問的授權。4、ss核心安全實現(xiàn)web安全通過配置servlet filter激活ss中的過濾器鏈實現(xiàn)session一致性驗證實現(xiàn)免登陸驗證(remember-me驗證)提供一系列標簽庫進行頁面元素的安全控制方法安全通過aop模式實現(xiàn)安全代理web安全與方法安全均可以使用表達式語言定義訪問規(guī)則5、配置ss配置web.xml,應用安全過濾器配置spring,驗證與授權部分在web頁面中獲取用戶身份在web頁面中應用安全標簽庫實現(xiàn)方
3、法級安全6、配置web.xml7、spring配置文件中設置命名空間8、通過數(shù)據(jù)庫驗證用戶身份9、完善web頁面驗證規(guī)則10、自定義驗證配置11、本地化消息輸出(國際化) 根據(jù)公司項目的開發(fā)要求和集合spring security3.0功能,公司將通過數(shù)據(jù)庫進行對用戶身份驗證和授權,系統(tǒng)將建立5個基礎表進行對權利的管理。第一部分 數(shù)據(jù)庫設計1、表設計表1:用戶表(pub_users)序號字段類型含義備注1user_idvchar(32)用戶idpk2user_accountvchar(30)登陸用戶名(登陸號)3user_namevchar(40)用戶姓名4user_passwordvchar
4、(100)用戶密碼5enabledint是否被禁用0禁用1正常6issysint是否是超級用戶0非1是7user_descvchar(100)描述說明:pub_users表中的登錄名和密碼用來控制用戶的登錄。表2:權限表(pub_authorities)序號字段類型含義備注1authority_idvchar(32)權限idpk2authority_namevchar(40)權限名稱3authority_descvchar(100)權限描述4enabledint是否被禁用0禁用1正常5issysint是否是超級權限0非1是說明:pub_authorities表中描述的是系統(tǒng)擁有哪些權限,如果要
5、詳細分類,可以將一個url定義一個權限,那樣就能對所有資源進行管理。表3:角色表(pub_roles)序號字段類型含義備注1role_idvchar(32)角色idpk2role_namevchar(100)角色名稱3role_descvchar(100)角色描述4enabledint是否被禁用0禁用1正常5issysint是否是超級權限0非1是說明:pub_roles表中描述的是系統(tǒng)按用戶分類或按照功能模塊分類,將系統(tǒng)進行整合歸類管理。表4:資源表(pub_resources)序號字段類型含義備注1resource_idvchar(32)資源idpk2resource_namevchar(1
6、00)資源名稱3resource _typevchar(40)資源類型url、method4priorityint資源優(yōu)先權即排序5resource _stringvchar(200)資源鏈接6resource_descvchar(100)資源描述7enabledint是否被禁用0禁用1正常8issysint是否是超級權限0非1是說明:pub_roles表中描述的是系統(tǒng)需要保護的資源及(url或方法)。以上四個表是權限管理的基礎表(用戶表、權限表、角色表、資源表)。表5:用戶角色連接表(pub_users_roles)序號字段類型含義備注1idindetityid主鍵pk2user_idvch
7、ar(32)用戶id3role_idvchar(32)角色id說明:用來管理用戶和角色的關系。表6:角色權限連接表(pub_roles_authorities)序號字段類型含義備注1idindetityid主鍵pk2role _idvchar(32)角色id3authority_idvchar(32)權限id說明:用來管理角色和權限的關系。表7:權限資源連接表(pub_authorities_resources)序號字段類型含義備注1idindetityid主鍵pk2authority_idvchar(32)權限id3resource_idvchar(32)資源id說明:用來管理角色和權限的關
8、系。2、建表語句如下(數(shù)據(jù)庫采用ms sql 2000):create table pub_users( user_id varchar(32), user_account varchar(30), user_name varchar(40), user_password varchar(100), user_desc varchar(100), enabled int, issys int);alter table pub_users add constraint pk_pub_users primary key(user_id);create table pub_authorities(
9、authority_id varchar(32), authority_name varchar(40), authority_desc varchar(100), enabled int, issys int);alter table pub_authorities add constraint pk_pub_authorities primary key(authority_id);create table pub_roles( role_id varchar(32), role_name varchar(40), role_desc varchar(100), enabled int,
10、issys int);alter table pub_roles add constraint pk_pub_roles primary key(role_id);create table pub_resources( resource_id varchar(32), resource_name varchar(100), resource_desc varchar(100), resource_type varchar(40), resource_string varchar(200), priority int, enabled int, issys int);alter table pu
11、b_resources add constraint pk_pub_resources primary key(resource_id);create table pub_users_roles( id numeric(12,0) identity not null, user_id varchar(32), role_id varchar(32), enabled int);alter table pub_users_roles add constraint pk_pub_users_roles primary key(id);alter table pub_users_roles add
12、constraint fk_users_roles_users foreign key(user_id) references pub_users(user_id);alter table pub_users_roles add constraint fk_users_roles_roles foreign key(role_id) references pub_roles(role_id);create table pub_roles_authorities( id numeric(12,0) identity not null, role_id varchar(32), authority
13、_id varchar(32), enabled int);alter table pub_roles_authorities add constraint pk_pub_roles_authorities primary key(id);alter table pub_roles_authorities add constraint fk_pub_roles_authorities_authorities foreign key(authority_id) references pub_authorities(authority_id);alter table pub_roles_autho
14、rities add constraint fk_pub_roles_authorities_roles foreign key(role_id) references pub_roles(role_id);create table pub_authorities_resources( id numeric(12,0) identity not null, authority_id varchar(32), resource_id varchar(32), enabled int);alter table pub_authorities_resources add constraint pk_
15、pub_authorities_resources primary key(id);alter table pub_authorities_resources add constraint fk_pub_authorities_resources_authorities foreign key(authority_id) references pub_authorities(authority_id);alter table pub_authorities_resources add constraint fk_pub_authorities_resources_resources forei
16、gn key(resource_id) references pub_resources(resource_id);3、e-r圖如下:第二部分 web數(shù)據(jù)庫整合提示:相關代碼請參考項目模塊1、將數(shù)據(jù)庫表結構和hibernate建立映射,本系統(tǒng)采用annotation進行對數(shù)據(jù)庫進行零配置處理(請參考hibernate映射),如圖。2、建立權限的dao層。3、建立權限的service層4、配置web.xml <?xml version="1.0" encoding="utf-8"?><web-app version="2.5&q
17、uot; xmlns="xmlns:xsi="/2001/xmlschema-instance"xsi:schemalocation=" <display-name>rstframe</display-name><context-param><param-name>webapprootkey</param-name><param-value>rstframe.root</param-value></context-param>&
18、lt;context-param><param-name>log4jconfiglocation</param-name><param-value>classpath:perties</param-value></context-param><context-param><param-name>log4jrefreshinterval</param-name><param-value>60000</param-value></context-pa
19、ram> <!- spring applicationcontext配置文件的路徑,可使用通配符,多個路徑用,號分隔此參數(shù)用于后面的spring context loader -><context-param><param-name>contextconfiglocation</param-name><param-value>classpath*:/applicationcontext.xml,classpath*:/applicationcontext-rstframe.xml</param-value></
20、context-param><!- character encoding filter -><filter><filter-name>encodingfilter</filter-name><filter-class>org.springframework.web.filter.characterencodingfilter</filter-class><init-param><param-name>encoding</param-name><param-value>u
21、tf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingfilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!- springside's hibernate open session in view filter-><filter><filter-name>hibe
22、rnateopensessioninviewfilter</filter-name><filter-class>com.rstco.frame.modules.orm.hibernate.opensessioninviewfilter</filter-class><init-param><param-name>excludesuffixs</param-name><param-value>js,css,jpg,gif</param-value></init-param></filt
23、er><filter-mapping><filter-name>hibernateopensessioninviewfilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!- springsecurity filter-> <filter> <filter-name>springsecurityfilterchain</filter-name> <filter-class>org
24、.springframework.web.filter.delegatingfilterproxy</filter-class> </filter> <filter-mapping> <filter-name>springsecurityfilterchain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!- struts2 filter, actionpackages -><filter>&l
25、t;filter-name>struts2filter</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class></filter><filter-mapping><filter-name>struts2filter</filter-name><url-pattern>/*</url-pattern></filte
26、r-mapping> <!-spring的applicationcontext 載入 -><listener><listener-class>org.springframework.web.context.contextloaderlistener</listener-class></listener><listener><listener-class>org.springframework.web.util.log4jconfiglistener</listener-class></l
27、istener><!- spring 刷新introspector防止內存泄露 -><listener><listener-class>org.springframework.web.util.introspectorcleanuplistener</listener-class></listener><!- 防止多人登陸 ,控制一個用戶只能登錄一次,不能在其他地方重新登錄-> <listener><listener-class>org.springframework.security.web
28、.session.httpsessioneventpublisher </listener-class></listener><!- session超時定義,單位為分鐘 -><session-config><session-timeout>20</session-timeout></session-config><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
29、<!- error page -><error-page><exception-type>java.lang.throwable</exception-type><location>/common/500.jsp</location></error-page><error-page><error-code>500</error-code><location>/common/500.jsp</location></error-page><
30、;error-page><error-code>404</error-code><location>/common/404.jsp</location></error-page><error-page><error-code>403</error-code><location>/common/403.jsp</location></error-page><jsp-config><taglib><taglib-uri>/we
31、b-inf/struts-menu-el.tld</taglib-uri><taglib-location>/web-inf/tlds/struts-menu-el.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/struts-menu.tld</taglib-uri><taglib-location>/web-inf/tlds/struts-menu.tld</taglib-location></taglib&
32、gt;<taglib><taglib-uri>/web-inf/c.tld</taglib-uri><taglib-location>/web-inf/tlds/c.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/fmt.tld</taglib-uri><taglib-location>/web-inf/tlds/fmt.tld</taglib-location></taglib>&
33、lt;taglib><taglib-uri>/web-inf/fn.tld</taglib-uri><taglib-location>/web-inf/tlds/fn.tld</taglib-location></taglib><!-loushang tld-><taglib><taglib-uri>/web-inf/web-date.tld</taglib-uri><taglib-location>/web-inf/tlds/web-date.tld</tagl
34、ib-location></taglib><taglib><taglib-uri>/web-inf/web-flex.tld</taglib-uri><taglib-location>/web-inf/tlds/web-flex.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-graph.tld</taglib-uri><taglib-location>/web-inf/tlds/
35、web-graph.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-grid.tld</taglib-uri><taglib-location>/web-inf/tlds/web-grid.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-html.tld</taglib-uri><taglib-locat
36、ion>/web-inf/tlds/web-html.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-list.tld</taglib-uri><taglib-location>/web-inf/tlds/web-list.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-loushang.tld</taglib
37、-uri><taglib-location>/web-inf/tlds/web-loushang.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-menu.tld</taglib-uri><taglib-location>/web-inf/tlds/web-menu.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf
38、/web-multitab.tld</taglib-uri><taglib-location>/web-inf/tlds/web-multitab.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-seltree.tld</taglib-uri><taglib-location>/web-inf/tlds/web-seltree.tld</taglib-location></taglib><ta
39、glib><taglib-uri>/web-inf/web-tab.tld</taglib-uri><taglib-location>/web-inf/tlds/web-tab.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-tree.tld</taglib-uri><taglib-location>/web-inf/tlds/web-tree.tld</taglib-location><
40、;/taglib><taglib><taglib-uri>/web-inf/web-widgets.tld</taglib-uri><taglib-location>/web-inf/tlds/web-widgets.tld</taglib-location></taglib><taglib><taglib-uri>/web-inf/web-i18n.tld</taglib-uri><taglib-location>/web-inf/tlds/web-i18n.tld&
41、lt;/taglib-location></taglib><!- loushang end-><taglib><taglib-uri>/web-inf/gystudio.tld</taglib-uri><taglib-location>/web-inf/tlds/gystudio.tld</taglib-location></taglib></jsp-config><mime-mapping><extension>rar</extension>&
42、lt;mime-type>application/rar</mime-type></mime-mapping></web-app>5、配置spring security3.0中的xml文件 文件名:applicationcontext-security.xml<?xml version="1.0" encoding="utf-8"?><beans:beans xmlns="/schema/security" xmlns
43、:beans="/schema/beans" xmlns:xsi="/2001/xmlschema-instance" xsi:schemalocation="/schema/beans /schema/beans/spring-beans-3.0.xsd /schema/securi
44、ty /schema/security/spring-security-3.0.xsd"><beans:description>springsecurity安全配置</beans:description><!- http安全配置 -> <http auto-config="true"><intercept-url pattern="/css/*" filters="none" /><interce
45、pt-url pattern="/images/*" filters="none" /><intercept-url pattern="/js/*" filters="none" /><intercept-url pattern="/login.jsp" filters="none" /><!-<intercept-url pattern="/index.jsp" access="role_user&qu
46、ot;/><intercept-url pattern="/main.jsp" access="role_adamin"/> -><form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?error=1" /><!- 嘗試訪問沒有權限的頁面時跳轉的頁面 -> <access-denied-
47、handler error-page="/common/403.jsp"/> <logout logout-success-url="/login.jsp" /> <session-management> <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> </session-management><!- 增加一個filter,這點與acegi是不一樣的,不能修
48、改默認的filter了,這個filter位于filter_security_interceptor之前 -> <custom-filter ref="myfilter" before="filter_security_interceptor"/> </http><!- 一個自定義的filter,必須包含authenticationmanager,accessdecisionmanager,securitymetadatasource三個屬性, 我們的所有控制將在這三個類中實現(xiàn),解釋詳見具體配置 -> <be
49、ans:bean id="myfilter" class="erceptor.myfiltersecurityinterceptor"> <beans:property name="authenticationmanager" ref="authenticationmanager" /> <beans:property name="accessdecisionmanager" ref="myacce
50、ssdecisionmanagerbean" /> <beans:property name="securitymetadatasource" ref="mysecuritymetadatasource" /> </beans:bean> <!- 驗證配置 , 認證管理器,實現(xiàn)用戶認證的入口,主要實現(xiàn)userdetailsservice接口即可 -> <authentication-manager alias="authenticationmanager"> <au
51、thentication-provider user-service-ref="userdetailsservice"> <!-<s:password-encoder hash="sha" /> -></authentication-provider> </authentication-manager><!- 項目實現(xiàn)的用戶查詢服務,將用戶信息查詢出來 -><beans:bean id="userdetailsservice" class="com.rs
52、tco.frame.pub.security.support.myuserdetailservice" /><!- 訪問決策器,決定某個用戶具有的角色,是否有足夠的權限去訪問某個資源 -> <beans:bean id="myaccessdecisionmanagerbean" class="com.rstco.frame.pub.security.support.myaccessdecisionmanager"> </beans:bean> <!- 資源源數(shù)據(jù)定義,將所有的資源和權限對應關系建立
53、起來,即定義某一資源可以被哪些角色訪問 -> <beans:bean id="mysecuritymetadatasource" class="com.rstco.frame.pub.security.support.myinvocationsecuritymetadatasourceservice"> </beans:bean> <!- 定義國際化 -> <beans:bean id="messagesource" class="org.springframework.con
54、text.support.reloadableresourcebundlemessagesource"> <beans:property name="basename" value="classpath:org/springframework/security/messages_zh_cn"/></beans:bean></beans:beans>第三部分 ss3.0的實現(xiàn)這是項目的主體部分:這四個類說明如下。一、 用來獲得用戶驗證信息(myuserdetailservice)代碼如下:package
55、com.rstco.frame.pub.security.support;import java.util.arraylist;import java.util.collection;import java.util.list;import org.springframework.beans.factory.annotation.autowired;import org.springframework.dao.dataaccessexception;import org.springframework.security.core.grantedauthority;import org.spri
56、ngframework.security.core.userdetails.user;import org.springframework.security.core.userdetails.userdetails;import org.springframework.security.core.userdetails.userdetailsservice;import org.springframework.security.core.userdetails.usernamenotfoundexception;import org.springframework.stereotype.ser
57、vice;import com.rstco.frame.pub.security.dao.pubauthoritiesresourcesdao;import com.rstco.frame.pub.security.dao.pubusersdao;import com.rstco.frame.pub.security.entity.pubauthorities;import com.rstco.frame.pub.security.entity.pubauthoritiesresources;/你就可以從數(shù)據(jù)庫中讀入用戶的密碼,角色信息,是否鎖定,賬號是否過期servicepublic cla
58、ss myuserdetailservice implements userdetailsservice autowiredprivate pubusersdao pubusersdao;autowiredprivate pubauthoritiesresourcesdao pubauthoritiesresourcesdao; public userdetails loaduserbyusername(string username)throws usernamenotfoundexception, dataaccessexception collection<grantedautho
59、rity> auths=new arraylist<grantedauthority>();/取得用戶的權限list<pubauthorities> auth=pubusersdao.findauthbyusername(username);string password=null;/取得用戶的密碼password=pubusersdao.finduserbyname(username).get(0).getuserpassword();list<pubauthoritiesresources> aaa=pubauthoritiesresourcesdao.getall(); user user = new use
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 絕句教案范文集錦6篇
- 教師個人工作計劃2022年
- 大班春節(jié)教案
- 項目管理部門工作計劃范文
- 保溫材料生產項目投資計劃書
- 2022公共衛(wèi)生工作計劃10篇
- 護理專業(yè)自我鑒定10篇
- 年度工作總結合集15篇
- 網絡創(chuàng)新課程設計
- 基督山伯爵讀書筆記15篇
- 電信業(yè)務運營與服務規(guī)范
- 室性心動過速
- 報考中級會計的從事會計工作年限證明模板
- 滅火器、消防栓安全檢查表
- 收費站突發(fā)事件應急預案(10篇)
- 2024年-2025年公路養(yǎng)護工理論知識考試題及答案
- 地 理世界的聚落 課件-2024-2025學年七年級地理上學期(湘教版2024)
- 建筑施工安全檢查標準JGJ59-2011
- (完整)注冊安全工程師考試題庫(含答案)
- 2024秋期國家開放大學《可編程控制器應用實訓》一平臺在線形考(形成任務7)試題及答案
- 虛假信息的傳播與倫理
評論
0/150
提交評論