《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

相关文章
相关标签/搜索