亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring Security 3應(yīng)用的11個步驟

系統(tǒng) 1582 0
  1. Spring Security
    11個步驟為應(yīng)用程序添加安全防護
  2. 歷史與現(xiàn)狀
    自2003年出現(xiàn)的Spring擴展插件Acegi Security發(fā)展而來。
    目前最新 版本為3.x,已成為Spring的一部分。
    為J2EE企業(yè)應(yīng)用程序提供可靠的安全性服務(wù)。
  3. Authentication vs. Authorization
    區(qū)分概念驗證與授權(quán)
    驗證
    這 個用戶是誰?
    用戶身份可靠嗎?
    授權(quán)
    某用戶A是否可以訪問資源R
    某用戶A是否可以執(zhí)行M操作
    某用戶A是否可以對資 源R執(zhí)行M操作
  4. SS中的驗證特點
    支持多種驗證方式
    支持多種加密格式
    支持組件的擴展和替換
    可以本地化 輸出信息
  5. SS中的授權(quán)特點
    支持多種仲裁方式
    支持組件的擴展和替換
    支持對頁面訪問、方法訪問、對象訪問 的授權(quán)。
  6. SS核心安全實現(xiàn)
    Web安全
    通過配置Servlet Filter激活SS中的過濾器鏈
    實現(xiàn) Session一致性驗證
    實現(xiàn)免登陸驗證(Remember-Me驗證)
    提供一系列標(biāo)簽庫進行頁面元素的安全控制
    方法安全
    通 過AOP模式實現(xiàn)安全代理
    Web安全與方法安全均可以使用表達式語言定義訪問規(guī)則
  7. 配置SS
    配置Web.xml,應(yīng)用安全過濾器
    配置Spring,驗證與授權(quán)部分
    在web頁面 中獲取用戶身份
    在web頁面中應(yīng)用安全標(biāo)簽庫
    實現(xiàn)方法級安全
  8. 1:配置web.xml
    Java代碼
    1. <filter>??
    2. <filter-name>springSecurityFilterChain</filter-name>??
    3. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>??
    4. </filter>??
    5. <filter-mapping>??
    6. <filter-name>springSecurityFilterChain</filter-name>??
    7. <url-pattern>/*</url-pattern>??
    8. </filter-mapping>??
    9. <context-param>??
    10. <param-name>contextConfigLocation</param-name>??
    11. <param-value>classpath:spring.xml</param-value>??
    12. </context-param>??
    13. <listener>??
    14. <listener-class>??
    15. org.springframework.web.context.ContextLoaderListener??
    16. </listener-class>??
    17. </listener>??
    <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
  9. 2:Spring配置文件中設(shè)置命名空間
    Java代碼
    1. <?xml?version="1.0"?encoding="UTF-8"?>??
    2. <beans:beansxmlns="http://www.springframework.org/schema/security"??
    3. xmlns:beans="http://www.springframework.org/schema/beans"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans??
    5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd??
    6. http://www.springframework.org/schema/security??
    7. http://www.springframework.org/schema/security/spring-security-3.0.xsd">??
    8. </beans:beans>??
    <?xml version="1.0" encoding="UTF-8"?> <beans:beansxmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> </beans:beans> ?
  10. 3:配置最基本的驗證與授權(quán)
    Java代碼
    1. <http?auto-config="true">??
    2. <intercept-url?pattern="/**"?access="ROLE_USER"?/>??
    3. </http>??
    4. <authentication-manager>??
    5. <authentication-provider>??
    6. <user-service>??
    7. <user?name="tom"?password="123"?authorities="ROLE_USER,?ROLE_A"?/>??
    8. <user?name="jerry"?password="123"?authorities="ROLE_USER,?ROLE_B"?/>??
    9. </user-service>??
    10. </authentication-provider>??
    11. </authentication-manager>??
    <http auto-config="true"> <intercept-url pattern="/**" access="ROLE_USER" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="tom" password="123" authorities="ROLE_USER, ROLE_A" /> <user name="jerry" password="123" authorities="ROLE_USER, ROLE_B" /> </user-service> </authentication-provider> </authentication-manager>
  11. 4:通過數(shù)據(jù)庫驗證用戶身份
    Java代碼
    1. <authentication-manager>??
    2. <authentication-provider>??
    3. <password-encoder?hash=“md5”/>??
    4. <jdbc-user-service?data-source-ref="dataSource"/>??
    5. </authentication-provider>??
    6. </authentication-manager>??
    7. 數(shù) 據(jù)表結(jié)構(gòu)見SS說明手冊附錄A??
    <authentication-manager> <authentication-provider> <password-encoder hash=“md5”/> <jdbc-user-service data-source-ref="dataSource"/> </authentication-provider> </authentication-manager> 數(shù)據(jù)表結(jié)構(gòu)見SS說明手冊附錄A
  12. 5:完善web頁面驗證規(guī)則
    Java代碼
    1. <http?auto-config="true">??
    2. <intercept-url?pattern="/js/**"?filters="none"/>??
    3. <intercept-url?pattern="/css/**"?filters="none"/>??
    4. <intercept-url?pattern="/images/**"?filters="none"/>??
    5. <intercept-url?pattern="/a.jsp"?access="ROLE_A"?/>??
    6. <intercept-url?pattern="/b.jsp"?access="ROLE_B"?/>??
    7. <intercept-url?pattern="/c.jsp"?access="ROLE_A,?ROLE_B"?/>??
    8. <intercept-url?pattern="/**"?access="ROLE_USER"?/>??
    9. </http>??
    <http auto-config="true"> <intercept-url pattern="/js/**" filters="none"/> <intercept-url pattern="/css/**" filters="none"/> <intercept-url pattern="/images/**" filters="none"/> <intercept-url pattern="/a.jsp" access="ROLE_A" /> <intercept-url pattern="/b.jsp" access="ROLE_B" /> <intercept-url pattern="/c.jsp" access="ROLE_A, ROLE_B" /> <intercept-url pattern="/**" access="ROLE_USER" /> </http>
  13. 6:自定義驗證配置
    Java代碼
    1. <!--?指 定登陸頁面、成功頁面、失敗頁面-->??
    2. <form-login?login-page="/login.jsp"?default-target-url="/index.jsp"?authentication-failure-url="/login.jsp"?/>??
    3. <!--?嘗 試訪問沒有權(quán)限的頁面時跳轉(zhuǎn)的頁面?-->??
    4. <access-denied-handler?error-page="/accessDenied.jsp"/>??
    5. <!--?使 用記住用戶名、密碼功能,指定數(shù)據(jù)源和加密的key?-->??
    6. <remember-me?data-source-ref="dataSource"?/>??
    7. <!--?logout 頁面,logout后清除session?-->??
    8. <logout?invalidate-session="true"?logout-success-url="/login.jsp"?/>??
    9. <!--?session?失 效后跳轉(zhuǎn)的頁面,最大登陸次數(shù)?-->??
    10. <session-management?invalid-session-url="/sessionTimeout.htm">??
    11. <concurrency-control?max-sessions="1"?expired-url="/sessionTimeout.htm"?/>??
    12. </session-management>??
    13. </http>??
    14. 可 以使用SS自帶的登陸頁面作為login.jsp的模板??
    <http auto-config="true"> <!-- 指定登陸頁面、成功頁面、失敗頁面--> <form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp" /> <!-- 嘗試訪問沒有權(quán)限的頁面時跳轉(zhuǎn)的頁面 --> <access-denied-handler error-page="/accessDenied.jsp"/> <!-- 使用記住用戶名、密碼功能,指定數(shù)據(jù)源和加密的key --> <remember-me data-source-ref="dataSource" /> <!-- logout頁面,logout后清除session --> <logout invalidate-session="true" logout-success-url="/login.jsp" /> <!-- session 失效后跳轉(zhuǎn)的頁面,最大登陸次數(shù) --> <session-management invalid-session-url="/sessionTimeout.htm"> <concurrency-control max-sessions="1" expired-url="/sessionTimeout.htm" /> </session-management> </http> 可以使用SS自帶的登陸頁面作為login.jsp的模板
  14. 7:本地化消息輸出
    拷貝本地化資源文件后,在配置文件中加載該文件:
    Java代碼
    1. <!--?加 載錯誤信息資源文件?-->??
    2. <beans:bean?id="messageSource"???
    3. class="org.springframework.context.support.ReloadableResourceBundleMessageSource">??
    4. <beans:property?name="basename"?value="classpath:messages"/>??
    5. </beans:bean>??
    6. 資 源文件在SS核心包:spring-security-core-3.0.2.RELEASE.jar的orgspringframeworksecurity目錄 中??
    <!-- 加載錯誤信息資源文件 --> <beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <beans:property name="basename" value="classpath:messages"/> </beans:bean> 資源文件在SS核心包:spring-security-core-3.0.2.RELEASE.jar的orgspringframeworksecurity目錄中
  15. 8:在web頁面中獲取用戶信息
    Java代碼
    1. 方式 一:Java代碼??
    2. Authentication?auth?=?SecurityContextHolder.getContext().getAuthentication();??
    3. Collection<GrantedAuthority>?col?=?auth.getAuthorities();??
    4. 方 式二:標(biāo)簽庫??
    5. <%@?taglib?prefix="sec"?uri="http://www.springframework.org/security/tags"?%>??
    6. <sec:authentication?property="name“/>??
    7. <sec:authentication?property="authorities“/>??
    方式一:Java代碼 Authentication auth = SecurityContextHolder.getContext().getAuthentication(); Collection<GrantedAuthority> col = auth.getAuthorities(); 方式二:標(biāo)簽庫 <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> <sec:authentication property="name“/> <sec:authentication property="authorities“/>
  16. 9:在web頁面進行元素安全控制
    Java代碼
    1. 方式一??
    2. <sec:authorizeifAnyGranted="ROLE_A">??
    3. <a?href="a.jsp">你可以訪問a.jsp</a>??
    4. </sec:authorize>??
    5. <sec:authorizeifNotGranted="ROLE_A">??
    6. 你 不可以訪問a.jsp??
    7. </sec:authorize>??
    8. 方 式二??
    9. <sec:authorizeurl="/a.jsp">??
    10. <a?href="a.jsp">你可以訪問a.jsp</a>??
    11. </sec:authorize>??
    方式一 <sec:authorizeifAnyGranted="ROLE_A"> <a href="a.jsp">你可以訪問a.jsp</a> </sec:authorize> <sec:authorizeifNotGranted="ROLE_A"> 你不可以訪問a.jsp </sec:authorize> 方式二 <sec:authorizeurl="/a.jsp"> <a href="a.jsp">你可以訪問a.jsp</a> </sec:authorize>
  17. 10:全局方法安全控制
    Java代碼
    1. <global-method-security?pre-post-annotations="enabled">??
    2. <protect-pointcut?expression="execution(*?com.xasxt.*Service.add*(..))"?access="ROLE_A"/>??
    3. <protect-pointcut?expression="execution(*?com.xasxt.*Service.delete*(..))"?access="ROLE_B"/>??
    4. </global-method-security>??
    5. 此 處使用了AspectJ中常用的切入點表達式(百度:AspectJ?execution)??
    <global-method-security pre-post-annotations="enabled"> <protect-pointcut expression="execution(* com.xasxt.*Service.add*(..))" access="ROLE_A"/> <protect-pointcut expression="execution(* com.xasxt.*Service.delete*(..))" access="ROLE_B"/> </global-method-security> 此處使用了AspectJ中常用的切入點表達式(百度:AspectJ execution)
  18. 11:使用注解進行方法安全控制
    Java代碼
    1. public?class?DemoService?{??
    2. @PreAuthorize("hasRole(&apos;ROLE_A&apos;)")??
    3. public?void?methodA()?{??
    4. }??
    5. @PreAuthorize("hasAnyRole(&apos;ROLE_A,?ROLE_B&apos;)")??
    6. public?void?methodB()?{??
    7. }??
    8. }??
    9. hasRole 與hasAnyRole為SS通用內(nèi)置表達式(google?:?spring?security?Common?Built- In?Expressions)??
    public class DemoService { @PreAuthorize("hasRole(&apos;ROLE_A&apos;)") public void methodA() { } @PreAuthorize("hasAnyRole(&apos;ROLE_A, ROLE_B&apos;)") public void methodB() { } } hasRole與hasAnyRole為SS通用內(nèi)置表達式(google : spring security Common Built-In Expressions)
  19. 12:下一步做什么???
    采用更安全的驗證方式
    采用安全的數(shù)據(jù)傳輸方式
    實現(xiàn)動態(tài)授權(quán)
    自 定義驗證與授權(quán)部件
    實現(xiàn)數(shù)據(jù)級安全

Spring Security 3應(yīng)用的11個步驟


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九视频只有精品 | 国产毛片黄片 | 欧美日片 | 精品国产一区二区三区成人 | 天天操天天干天天舔 | 香蕉精品视频在线观看入口 | 日日操免费视频 | 久久久精品免费 | 欧美在线国产 | 182午夜在线观看 | 国产精品99久久免费观看 | 青青热久免费精品视频在线观看 | 亚洲成a人片在线v观看 | 亚洲精品国产成人99久久 | 欧美精品观看 | 中文字字幕在线 | 成人做爰小视频 | 日韩欧美手机在线 | 在线观看日本免费视频大片一区 | 国产真实乱人偷精品 | 全部免费特黄特色大片视频 | 亚洲性一级理论片在线观看 | 中文字幕在线免费播放 | 99热久久国产精品免费看 | 国产精品亚洲国产三区 | 91久久国产成人免费观看资源 | 亚洲无线码一区在线观看 | 精品久久中文字幕 | 波多野结衣国产一区二区三区 | 成人合集大片bd高清在线观看 | 亚洲一级视频在线观看 | 91免费精品国自产拍在线不卡 | 欧美高清在线视频一区二区 | 国产欧美精品综合一区 | 久久久精品国产 | 日本aaaa精品免费视频 | 综合在线播放 | 免费播放美女一级毛片 | 香蕉国产人午夜视频在线观看 | 中文偷拍视频在线观看 | 亚洲欧美激情综合第一区 |