《Spring Security3》附錄翻譯(參考資料)

附錄:參考材料

在本附錄中,將會涉及到一些咱們感受有用的參考材料(並至關缺少文檔),而將其插入到章節的內容中又會以爲過於綜合。web

JBCP Pets示例代碼起步

就像咱們在第一章:一個不安全應用的剖析中所描述的那樣,咱們假設你已有了Eclipse 3.4(或3.5IDE,幷包含Web Tools PackageWTP)。示例代碼按每章被組織成了不一樣的ZIP文件,並有一個較大的ZIP文件其中包含了編譯和運行示例應用所須要的全部依賴(注意的是,當你閱讀本書的時候對應於最新版本的Spring Security它們可能已經較舊了,可是鑑於示例代碼和依賴是一個靜態的快照,它們可以永遠運行)。spring

咱們建議你對每一章創建新的Eclipse工做空間,這樣你可以切換工做空間而不用打開或關閉項目。express

如下的步驟幫助你創建新的工做空間。首先,咱們要導入Dependencies項目到工做空間中:安全

l 選擇「File」按鈕,接下來是「Import…」選項。選擇「General」文件夾以及「Existing Projects into Workspace」並點擊「Next」;服務器

l 確保「Select root directory」選項被選中,點擊「Browse...」按鈕到文本框。定位到你解壓Dependencies.zip的目錄並點擊「OK」;session

l 你應該能夠看到Dependencies項目被列了出來。點擊「Finish」。併發

接下來,咱們須要導入每章的源碼ZIP文件。假設你已經解壓了第二章:Spring Security起步的源碼到目錄中。ide

l 選擇「File」菜單以及「Import…」選項。選擇「General」文件夾以及「Existing Projects into Workspace」。點擊「Next」;post

l 確保「Select root directory」選項被選中並點擊「Browse…」按鈕到文本框。定位到你解壓第二章源碼ZIP文件的目錄並點擊「OK」;spa

l 你能夠看到「JBCPPets」項目和「Servers」項目被裂了出來。將它們都選中而後點擊「Finish」。

最後,咱們須要將JBCP Pets web應用部署到一個Tomcat實例上(或者你喜歡的應用服務器)。

l 右鍵點擊「JBCPPets」項目並選擇「Run As」菜單。在子菜單中選擇「Run on Server」菜單項;

l 這時候你可能須要建立一個新的應用服務器實例。只須要按照你應用服務器的提示直到web應用部署完成。

此時,你應該能夠運行JBCP Pets應用了。若是你遇到問題,可查看以下的列表:

l Eclipse是否列出了構建錯誤?若是有任何的Java錯誤或classpath錯誤,它們是應該被解決的真正錯誤。有時候,Spring IDE插件會報出假的錯誤或警告;

l 查看Eclipse的應用服務器啓動控制檯,這裏包含不成功部署的web應用的錯誤。最多見的問題是缺失classpath條目,或者忘記將全部的classpath條目添加到JBCPPets 項目的「Java EE Module Dependencies」。儘管這些應該已經爲你作好,可是咱們不能保證在任何版本的Eclipse下均好用。

對於示例代碼有任何問題請聯繫咱們——理解代碼和它的概念對你來講很重要!

可用的應用事件

下面的表格,在第六章:高級配置和擴展曾經提到,列出了各類Spring Security元素所發佈的所有事件並提供了第二章中引用到的認證異常。爲了簡便,咱們移除了包名,由於全部的時間都在o.s.s.authentication.event(認證相關的事件)和o.s.s.access.event(受權相關的事件)中。

類名

什麼時候觸發

匹配的異常

AbstractAuthenticationEvent

全部認證時間的通用父類。注意這是一個歷來不會被拋出的抽象異常(儘管其能夠被捕獲)

AbstractAuthenticationFailureEvent

全部認證失敗事件的通用父類。注意這是一個歷來不會被拋出的抽象異常(儘管其能夠被捕獲)

AuthenticationFailureBadCredentialsEvent

當提供的憑證(如用戶名和密碼)不合法時。它可以用來(有意的)掩蓋UsernameNotFoundException

BadCredentialsException

UsernameNotFoundException

AuthenticationFailureConcurrentLoginEvent

當併發session最大值超出時。

ConcurrentLoginException

AuthenticationFailureCredentialsExpiredEvent

UserDetails標識用戶憑證過時時。

CredentialsExpiredException

AuthenticationFailureDisabledEvent

UserDetails標識用戶憑證不可用時。

DisabledException

AuthenticationFailureExpiredEvent

UserDetails標識用戶帳號過時時。

AccountExpiredException

AuthenticationFailureLockedEvent

UserDetails標識用戶帳號被鎖定時。

LockedException

AuthenticationFailureProviderNotFoundEvent

配置錯誤,當不能找到Authentication Provider認證用戶請求時。

ProviderNotFoundException

AuthenticationFailureProxyUntrustedEvent

CAS代理ticket不可信時。

AuthenticationFailureServiceExceptionEvent

當底層服務(如DAO Provider)失敗時,拋出的通常異常。

AuthenticationServiceException

AuthenticationSuccessEvent

當用戶成功認證時。

AuthenticationSwitchUserEvent

當成功完成用戶切換行爲時。

InteractiveAuthenticationSuccess

Event

當用戶經過提供完整憑證認證成功時(相似於IS_FULLY_AUTHENTICATED GrantedAuthority語法)

AbstractAuthorizationEvent

全部認證事件的通用父類。

AuthenticationCredentialsNot

FoundEvent

當用戶沒有認證而試圖觸發須要訪問檢查的方法時。

AuthorizationFailureEvent

當方法前或後的訪問檢查失敗時。

AuthorizedEvent

當方法前或後的訪問檢查成功時。

PublicInvocationEvent

當未認證的安全對象請求成功時。

SessionCreationEvent

HttpSession建立時。

SessionDestroyedEvent

HttpSession銷燬時。

Spring Security的虛擬URL

如下的URLSpring Security視爲虛擬URL,並獨立於你的代碼做爲servelt過濾器流程的一部分進行監視(並處理)。記住的是這些URL是相對於你的web應用上下文根的。

l /j_spring_security_check——被UsernamePasswordAuthenticationFilter檢查進行用戶名/密碼form認證;

l /j_spring_openid_security_check——被OpenIDAuthenticationFilter檢查OpenID返回認證信息(從OpenID provider處);

l /j_spring_cas_security_check——基於CAS SSO登陸的返回,進行CAS認證

l /spring_security_login——當配置自動生成登陸頁面時,DefaultLoginPageGeneratingFilter使用的URL

l /j_spring_security_logout——LogoutFilter使用來檢測退出行爲;

l /saml/SSO——Spring Security SAML SSO extension SAMLProcessingFilter使用來進行SAML SSO登陸請求;

l /saml/logout——Spring Security SAML SSO extension SAMLLogoutFilter使用來進行SAML SSO退出請求;

l /j_spring_security_switch_user——SwitchUserFilter使用來將用戶切換至另外一用戶;

l /j_spring_security_exit_user——用來退出切換用戶功能。

注意的是,有一些功能在本書中沒有涵蓋,可是在這裏咱們爲了完整性所有包括了。

方法安全的明確bean配置

第六章源碼的dogstore-explicit-base.xml文件中包含了這裏bean聲明的全集。咱們之因此在第六章自己中沒有包含它,是由於它與要表述的沒有太大關係(參考第五章:精確的訪問控制來了解相關bean的功能)。

如下是經過Spring bean聲明啓用方法安全的完整配置:

Xml代碼 複製代碼 收藏代碼
  1. <!-- ************************************************** -->
  2. <!-- Method Authorization -->
  3. <!-- ************************************************** -->
  4. <bean class="org.springframework.security.access.intercept.
  5. aopalliance.MethodSecurityInterceptor" id="methodSecurityInterceptor">
  6. <property name="accessDecisionManager" ref="methodAccessDecisionMan
  7. ager"/>
  8. <property name="authenticationManager" ref="customAuthenticationMan
  9. ager"/>
  10. <property name="securityMetadataSource" ref="delegatingMetadataSour
  11. ce"/>
  12. <property name="afterInvocationManager" ref="afterInvocationManager
  13. "/>
  14. </bean>
  15. <bean class="org.springframework.security.access.intercept.
  16. aopalliance.MethodSecurityMetadataSourceAdvisor" id="methodSecurityMet
  17. adataSourceAdvisor">
  18. <constructor-arg value="methodSecurityInterceptor"/>
  19. <constructor-arg ref="delegatingMetadataSource"/>
  20. </bean>
  21. <bean class="org.springframework.aop.framework.autoproxy.
  22. DefaultAdvisorAutoProxyCreator" id="defaultAdvisorAutoProxyCreator">
  23. <property name="beanName" value="methodSecurityMetadataSourceAdviso
  24. r"/>
  25. </bean>
  26. <bean class="org.springframework.security.access.intercept.
  27. AfterInvocationProviderManager" id="afterInvocationManager">
  28. <property name="providers">
  29. <list>
  30. <ref local="postAdviceProvider"/>
  31. </list>
  32. </property>
  33. </bean>
  34. <bean class="org.springframework.security.access.vote.
  35. AffirmativeBased" id="methodAccessDecisionManager">
  36. <property name="decisionVoters">
  37. <list>
  38. <ref bean="preAdviceVoter"/>
  39. <ref bean="roleVoter"/>
  40. <ref bean="authenticatedVoter"/>
  41. <ref bean="jsr250Voter"/> <!-- For JSR 250 Method Annotations
  42. -->
  43. </list>
  44. </property>
  45. </bean>
  46. <!-- Overall Delegating Metadata Source -->
  47. <bean class="org.springframework.security.access.method.
  48. DelegatingMethodSecurityMetadataSource" id="delegatingMetadataSource">
  49. <property name="methodSecurityMetadataSources">
  50. <list>
  51. <ref local="prePostMetadataSource"/>
  52. <ref local="securedMetadataSource"/>
  53. <ref local="jsr250MetadataSource"/>
  54. </list>
  55. </property>
  56. </bean>
  57. <!-- JSR 250 Method Voters -->
  58. <bean class="org.springframework.security.access.annotation.
  59. Jsr250MethodSecurityMetadataSource" id="jsr250MetadataSource"/>
  60. <bean class="org.springframework.security.access.annotation.
  61. Jsr250Voter" id="jsr250Voter"/>
  62. <!-- Spring @Secured Beans -->
  63. <bean class="org.springframework.security.access.annotation.
  64. SecuredAnnotationSecurityMetadataSource" id="securedMetadataSource"/>
  65. <!-- @Pre/@Post Method Advice Voters -->
  66. <bean class="org.springframework.security.access.prepost.
  67. PreInvocationAuthorizationAdviceVoter" id="preAdviceVoter">
  68. <constructor-arg ref="exprPreInvocationAdvice"/>
  69. </bean>
  70. <bean class="org.springframework.security.access.prepost.
  71. PostInvocationAdviceProvider" id="postAdviceProvider">
  72. <constructor-arg ref="exprPostInvocationAdvice"/>
  73. </bean>
  74. <bean class="org.springframework.security.access.prepost.
  75. PrePostAnnotationSecurityMetadataSource" id="prePostMetadataSource">
  76. <constructor-arg ref="exprAnnotationAttrFactory"/>
  77. </bean>
  78. <!-- @Pre/@Post Method Expression Handler -->
  79. <bean class="org.springframework.security.access.expression.method.
  80. DefaultMethodSecurityExpressionHandler" id="methodExprHandler"/>
  81. <bean class="org.springframework.security.access.expression.method.
  82. ExpressionBasedPreInvocationAdvice" id="exprPreInvocationAdvice">
  83. <property name="expressionHandler" ref="methodExprHandler"/>
  84. </bean>
  85. <bean class="org.springframework.security.access.expression.method.
  86. ExpressionBasedPostInvocationAdvice" id="exprPostInvocationAdvice">
  87. <constructor-arg ref="methodExprHandler"/>
  88. </bean>
  89. <bean class="org.springframework.security.access.expression.method.
  90. ExpressionBasedAnnotationAttributeFactory" id="exprAnnotationAttrFact
  91. ory">
  92. <constructor-arg ref="methodExprHandler"/>
  93. </bean>
<!-- ************************************************** -->
<!-- Method Authorization                               -->
<!-- ************************************************** -->
<bean class="org.springframework.security.access.intercept.
aopalliance.MethodSecurityInterceptor" id="methodSecurityInterceptor">
  <property name="accessDecisionManager" ref="methodAccessDecisionMan
ager"/>
  <property name="authenticationManager" ref="customAuthenticationMan
ager"/>
  <property name="securityMetadataSource" ref="delegatingMetadataSour
ce"/>
  <property name="afterInvocationManager" ref="afterInvocationManager
"/>
</bean>
<bean class="org.springframework.security.access.intercept.
aopalliance.MethodSecurityMetadataSourceAdvisor" id="methodSecurityMet
adataSourceAdvisor">
  <constructor-arg value="methodSecurityInterceptor"/>
  <constructor-arg ref="delegatingMetadataSource"/>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.
DefaultAdvisorAutoProxyCreator" id="defaultAdvisorAutoProxyCreator">
  <property name="beanName" value="methodSecurityMetadataSourceAdviso
r"/>
</bean>
<bean class="org.springframework.security.access.intercept.
AfterInvocationProviderManager" id="afterInvocationManager">
  <property name="providers">
    <list>
      <ref local="postAdviceProvider"/>
    </list>
  </property>
</bean>
<bean class="org.springframework.security.access.vote.
AffirmativeBased" id="methodAccessDecisionManager">
  <property name="decisionVoters">
<list>
      <ref bean="preAdviceVoter"/>
      <ref bean="roleVoter"/>
      <ref bean="authenticatedVoter"/>
      <ref bean="jsr250Voter"/> <!-- For JSR 250 Method Annotations 
-->
    </list>
  </property>
</bean>
<!-- Overall Delegating Metadata Source -->
<bean class="org.springframework.security.access.method.
DelegatingMethodSecurityMetadataSource" id="delegatingMetadataSource">
  <property name="methodSecurityMetadataSources">
    <list>
     <ref local="prePostMetadataSource"/>
      <ref local="securedMetadataSource"/>
      <ref local="jsr250MetadataSource"/>
    </list>
  </property>
</bean>
<!-- JSR 250 Method Voters -->
<bean class="org.springframework.security.access.annotation.
Jsr250MethodSecurityMetadataSource" id="jsr250MetadataSource"/>
<bean class="org.springframework.security.access.annotation.
Jsr250Voter" id="jsr250Voter"/>
<!-- Spring @Secured Beans -->
<bean class="org.springframework.security.access.annotation.
SecuredAnnotationSecurityMetadataSource" id="securedMetadataSource"/>
<!-- @Pre/@Post Method Advice Voters -->
<bean class="org.springframework.security.access.prepost.
PreInvocationAuthorizationAdviceVoter" id="preAdviceVoter">
  <constructor-arg ref="exprPreInvocationAdvice"/>
</bean>
<bean class="org.springframework.security.access.prepost.
PostInvocationAdviceProvider" id="postAdviceProvider">
  <constructor-arg ref="exprPostInvocationAdvice"/>
</bean>
<bean class="org.springframework.security.access.prepost.
PrePostAnnotationSecurityMetadataSource" id="prePostMetadataSource">
  <constructor-arg ref="exprAnnotationAttrFactory"/>
</bean>
<!-- @Pre/@Post Method Expression Handler -->
<bean class="org.springframework.security.access.expression.method.
DefaultMethodSecurityExpressionHandler" id="methodExprHandler"/>
<bean class="org.springframework.security.access.expression.method.
ExpressionBasedPreInvocationAdvice" id="exprPreInvocationAdvice">
  <property name="expressionHandler" ref="methodExprHandler"/>
</bean>
<bean class="org.springframework.security.access.expression.method.
ExpressionBasedPostInvocationAdvice" id="exprPostInvocationAdvice">
  <constructor-arg ref="methodExprHandler"/>
</bean>
<bean class="org.springframework.security.access.expression.method.
ExpressionBasedAnnotationAttributeFactory" id="exprAnnotationAttrFact
ory">
  <constructor-arg ref="methodExprHandler"/>
</bean>

請注意,明確的bean配置與你使用的Spring Security版本密切相關(就像咱們在第六章提到的)。若是在你版本的Spring Security中使用列出的bean遇到問題,請參考o.s.s.config.method.GlobalMethodSecurityBeanDefinitionParser

這個配置啓用了JSR-250@Secured@Pre/@Post註解。若是你不使用它們要註釋掉或移除相關的支持bean(如@Secured)。記住,SecurityMetadataSourceAccessDecisionVoter都要移除。

邏輯過濾器名字遷移參考

正如在第十三章:遷移到Spring Security 3所討論的,不少邏輯過濾器名(在<custom-filter>用到)在從Spring Security 2升級到Spring Security 3時發生了變化。這裏咱們提供了全部的變化,來方便你從Spring Security 2 3對自定義過濾器的配置:

Spring Security 2

Spring Security 3

CHANNEL_FILTER

CHANNEL_FILTER

CONCURRENT_SESSION_FILTER

CONCURRENT_SESSION_FILTER

SESSION_CONTEXT_INTEGRATION_

FILTER

SECURITY_CONTEXT_FILTER

LOGOUT_FILTER

LOGOUT_FILTER

PRE_AUTH_FILTER

PRE_AUTH_FILTER

CAS_PROCESSING_FILTER

CAS_FILTER

AUTHENTICATION_PROCESSING_FILTER

FORM_LOGIN_FILTER

OPENID_PROCESSING_FILTER

OPENID_FILTER

Spring Security 2沒有提供LOGIN_PAGE_FILTER

LOGIN_PAGE_FILTER

Spring Security 2沒有提供DIGEST_AUTH_FILTER

DIGEST_AUTH_FILTER

BASIC_PROCESSING_FILTER

BASIC_AUTH_FILTER

Spring Security 2沒有提供REQUEST_CACHE_FILTER

REQUEST_CACHE_FILTER

SERVLET_API_SUPPORT_FILTER

SERVLET_API_SUPPORT_FILTER

REMEMBER_ME_FILTER

REMEMBER_ME_FILTER

ANONYMOUS_FILTER

ANONYMOUS_FILTER

Spring Security 2沒有提供SESSION_MANAGEMENT_FILTER

SESSION_MANAGEMENT_FILTER

EXCEPTION_TRANSLATION_FILTER

EXCEPTION_TRANSLATION_FILTER

NTLM_FILTER

Spring Security 3中移除了NTLM_FILTER

FILTER_SECURITY_INTERCEPTOR

FILTER_SECURITY_INTERCEPTOR

SWITCH_USER_FILTER

SWITCH_USER_FILTER

相關文章
相關標籤/搜索