日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 1854 0
  1. Spring Security
    11個(gè)步驟為應(yīng)用程序添加安全防護(hù)
  2. 歷史與現(xiàn)狀
    自2003年出現(xiàn)的Spring擴(kuò)展插件Acegi Security發(fā)展而來。
    目前最新 版本為3.x,已成為Spring的一部分。
    為J2EE企業(yè)應(yīng)用程序提供可靠的安全性服務(wù)。
  3. Authentication vs. Authorization
    區(qū)分概念驗(yàn)證與授權(quán)
    驗(yàn)證
    這 個(gè)用戶是誰?
    用戶身份可靠嗎?
    授權(quán)
    某用戶A是否可以訪問資源R
    某用戶A是否可以執(zhí)行M操作
    某用戶A是否可以對(duì)資 源R執(zhí)行M操作
  4. SS中的驗(yàn)證特點(diǎn)
    支持多種驗(yàn)證方式
    支持多種加密格式
    支持組件的擴(kuò)展和替換
    可以本地化 輸出信息
  5. SS中的授權(quán)特點(diǎn)
    支持多種仲裁方式
    支持組件的擴(kuò)展和替換
    支持對(duì)頁面訪問、方法訪問、對(duì)象訪問 的授權(quán)。
  6. SS核心安全實(shí)現(xiàn)
    Web安全
    通過配置Servlet Filter激活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ī)則
  7. 配置SS
    配置Web.xml,應(yīng)用安全過濾器
    配置Spring,驗(yàn)證與授權(quán)部分
    在web頁面 中獲取用戶身份
    在web頁面中應(yīng)用安全標(biāo)簽庫
    實(shí)現(xiàn)方法級(jí)安全
  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:配置最基本的驗(yàn)證與授權(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ù)庫驗(yàn)證用戶身份
    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說明手冊(cè)附錄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說明手冊(cè)附錄A
  12. 5:完善web頁面驗(yàn)證規(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:自定義驗(yàn)證配置
    Java代碼
    1. <!--?指 定登陸頁面、成功頁面、失敗頁面-->??
    2. <form-login?login-page="/login.jsp"?default-target-url="/index.jsp"?authentication-failure-url="/login.jsp"?/>??
    3. <!--?嘗 試訪問沒有權(quán)限的頁面時(shí)跳轉(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)限的頁面時(shí)跳轉(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. <!--?加 載錯(cuò)誤信息資源文件?-->??
    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目錄 中??
    <!-- 加載錯(cuò)誤信息資源文件 --> <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頁面進(jìn)行元素安全控制
    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中常用的切入點(diǎn)表達(dá)式(百度: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中常用的切入點(diǎn)表達(dá)式(百度:AspectJ execution)
  18. 11:使用注解進(jìn)行方法安全控制
    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)置表達(dá)式(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)置表達(dá)式(google : spring security Common Built-In Expressions)
  19. 12:下一步做什么???
    采用更安全的驗(yàn)證方式
    采用安全的數(shù)據(jù)傳輸方式
    實(shí)現(xiàn)動(dòng)態(tài)授權(quán)
    自 定義驗(yàn)證與授權(quán)部件
    實(shí)現(xiàn)數(shù)據(jù)級(jí)安全

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 元朗区| 兴业县| 通州区| 石景山区| 神池县| 麻栗坡县| 和田县| 新蔡县| 开封市| 海晏县| 四会市| 巧家县| 庆元县| 梁河县| 宣城市| 常山县| 德昌县| 富裕县| 武鸣县| 盐池县| 三原县| 肇庆市| 江津市| 黄浦区| 岳池县| 璧山县| 县级市| 和硕县| 西昌市| 阿克陶县| 琼结县| 东源县| 台安县| 翁牛特旗| 莱西市| 肃宁县| 大荔县| 穆棱市| 吴堡县| 新余市| 乌鲁木齐县|