收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


zhang的笔记
状态: 离线
人气:5023387
访问用户量:4221
笔记经验:
总积分:261656
级别:VIP5
搜索本笔记
ta的交流分类
ta的交流主题贴(544)
ta的所有交流贴(1049)
ta的全部笔记
全部笔记(255)
未分类笔记(1)
Java Web(9)
并发实践(1)
课程问题(0)
Java(22)
架构(1)
缓存(5)
JavaEE(0)
JVM(12)
跟我学spring3(68)
Spring Sec……(43)
Spring 3.x……(25)
Spring Sec……(20)
跟开涛学Spring……(17)
深入剖析Spring……(18)
性能调优(10)
前端(2)
Tomcat源码解读(1)
spring sec……(0)
存档
2014-01(7)
2013-12(10)
2012-10(4)
2012-09(2)
2012-08(31)
2012-07(10)
2012-06(5)
2012-05(41)
2012-04(3)
2012-03(41)
2012-02(54)
2011-11(17)
2011-10(30)

2013-12-31 16:28:41
《Spring Security3》附录翻译(参考资料)完
浏览(14599)|评论(4)   交流分类:Java|笔记分类: Spring Sec……

附录:参考材料

在本附录中,将会涉及到一些我们感觉有用的参考材料(并相当缺乏文档),而将其插入到章节的内容中又会觉得过于综合。

JBCP Pets示例代码起步

就像我们在第一章:一个不安全应用的剖析中所描述的那样,我们假设你已有了Eclipse 3.4(或3.5)IDE,并包含Web Tools Package(WTP)。示例代码按每章被组织成了不同的ZIP文件,并有一个较大的ZIP文件其中包含了编译和运行示例应用所需要的所有依赖(注意的是,当你阅读本书的时候对应于最新版本的Spring Security它们可能已经较旧了,但是鉴于示例代码和依赖是一个静态的快照,它们能够永远运行)。

 

我们建议你对每一章建立新的Eclipse工作空间,这样你能够切换工作空间而不用打开或关闭项目。

 

以下的步骤帮助你建立新的工作空间。首先,我们要导入Dependencies项目到工作空间中:

   选择“File”按钮,接下来是“Import…”选项。选择“General”文件夹以及“Existing Projects into Workspace”并点击“Next”;

   确保“Select root directory”选项被选中,点击“Browse...”按钮到文本框。定位到你解压Dependencies.zip的目录并点击“OK”;

   你应该可以看到Dependencies项目被列了出来。点击“Finish”。

         接下来,我们需要导入每章的源码ZIP文件。假设你已经解压了第二章:Spring Security起步的源码到目录中。

   选择“File”菜单以及“Import…”选项。选择“General”文件夹以及“Existing Projects into Workspace”。点击“Next”;

   确保“Select root directory”选项被选中并点击“Browse…”按钮到文本框。定位到你解压第二章源码ZIP文件的目录并点击“OK”;

   你可以看到“JBCPPets”项目和“Servers”项目被裂了出来。将它们都选中然后点击“Finish”。

         最后,我们需要将JBCP Pets web应用部署到一个Tomcat实例上(或者你喜欢的应用服务器)。

  右键点击“JBCPPets”项目并选择“Run As”菜单。在子菜单中选择“Run on Server”菜单项;

   这时候你可能需要创建一个新的应用服务器实例。只需要按照你应用服务器的提示直到web应用部署完成。

         此时,你应该可以运行JBCP Pets应用了。如果你遇到问题,可查看如下的列表:

   Eclipse是否列出了构建错误?如果有任何的Java错误或classpath错误,它们是应该被解决的真正错误。有时候,Spring IDE插件会报出假的错误或警告;

   查看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

以下的URL被Spring Security视为虚拟URL,并独立于你的代码作为servelt过滤器流程的一部分进行监视(并处理)。记住的是这些URL是相对于你的web应用上下文根的。

   /j_spring_security_check——被UsernamePasswordAuthenticationFilter检查进行用户名/密码form认证;

   /j_spring_openid_security_check——被OpenIDAuthenticationFilter检查OpenID返回认证信息(从OpenID provider处);

   /j_spring_cas_security_check——基于CAS SSO登录的返回,进行CAS认证

   /spring_security_login——当配置自动生成登录页面时,DefaultLoginPageGeneratingFilter使用的URL;

   /j_spring_security_logout——LogoutFilter使用来检测退出行为;

   /saml/SSO——Spring Security SAML SSO extension SAMLProcessingFilter使用来进行SAML SSO登录请求;

   /saml/logout——Spring Security SAML SSO extension SAMLLogoutFilter使用来进行SAML SSO退出请求;

   /j_spring_security_switch_user——SwitchUserFilter使用来将用户切换至另一用户;

   /j_spring_security_exit_user——用来退出切换用户功能。

 

注意的是,有一些功能在本书中没有涵盖,但是在这里我们为了完整性全部包括了。

方法安全的明确bean配置

第六章源码的dogstore-explicit-base.xml文件中包含了这里bean声明的全集。我们之所以在第六章本身中没有包含它,是因为它与要表述的没有太大关系(参考第五章:精确的访问控制来了解相关bean的功能)。

 

以下是通过Spring bean声明启用方法安全的完整配置:

 

java代码:
<!-- ************************************************** -->  
<!-- 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)。记住,SecurityMetadataSource和AccessDecisionVoter都要移除。

逻辑过滤器名字迁移参考

正如在第十三章:迁移到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

 

 



感谢  iteye  lengyun3566 。

 

他的博客地址:http://lengyun3566.iteye.com

他的新浪微博:http://weibo.com/1920428940

本书源代码的地址:http://www.packtpub.com/support?nid=4435

精品视频课程推荐

透彻理解JavaBean视频教程
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。

ssh+jbpm项目(某集团OA)视频教程
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。 包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的taglib;示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器

Ajax+JSON基础实战视频教程
数据校验、Javascript模拟多线程、下拉列表联动、操作XML、AJAX结合JSON的操作、Json-lib的使用

深入浅出学Spring Web MVC视频教程
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识

深入浅出学Spring Data JPA视频教程
系统、完整的学习Spring Data JPA开发的知识。包括:Spring Data JPA入门;JpaRepository基本功能 ;JpaRepository的查询;客户化扩展JpaRepository;Specifications查询。

浏览(14599)|评论(4)   交流分类:Java|笔记分类: Spring Sec……

评论(4)
4楼 linuxe680  2013-12-31 引用

谢谢

3楼 关耳丘山川  2013-10-10 引用

JBCPPets在哪里可以下载啊?谢谢

2楼 xixingzhe  2013-06-02 引用
谢谢分享
1楼 Willwind_Yun  2013-06-01 引用

不错,谢谢分享

请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网