- 浏览: 452508 次
- 性别:
- 来自: 大连
博客专栏
-
《Spring Secur...
浏览量:383401
文章分类
最新评论
-
蒙奇君杰:
必须感谢一番!!!愿开源的态度为更多的人所拥有,所 认同!
关于对《Spring Security3》一书的翻译说明 -
601235723:
bbjavaeye 写道你好,有个问题请教一下我配了<b ...
《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsService) -
bay0902:
中国互联网的脊梁
Spring Security 3全文下载 -
hdcustc:
项目源码下载 微博网盘里的那个依赖文件损坏了啊 能否提供个可 ...
Spring Security 3全文下载 -
i641878506:
楼主辛苦, 可以提供原书的原项目文件的下载么
Spring Security 3全文下载
附录:参考材料
在本附录中,将会涉及到一些我们感觉有用的参考材料(并相当缺乏文档),而将其插入到章节的内容中又会觉得过于综合。
JBCP Pets示例代码起步
就像我们在第一章:一个不安全应用的剖析中所描述的那样,我们假设你已有了Eclipse 3.4(或3.5)IDE,并包含Web Tools Package(WTP)。示例代码按每章被组织成了不同的ZIP文件,并有一个较大的ZIP文件其中包含了编译和运行示例应用所需要的所有依赖(注意的是,当你阅读本书的时候对应于最新版本的Spring Security它们可能已经较旧了,但是鉴于示例代码和依赖是一个静态的快照,它们能够永远运行)。
我们建议你对每一章建立新的Eclipse工作空间,这样你能够切换工作空间而不用打开或关闭项目。
以下的步骤帮助你建立新的工作空间。首先,我们要导入Dependencies项目到工作空间中:
l 选择“File”按钮,接下来是“Import…”选项。选择“General”文件夹以及“Existing Projects into Workspace”并点击“Next”;
l 确保“Select root directory”选项被选中,点击“Browse...”按钮到文本框。定位到你解压Dependencies.zip的目录并点击“OK”;
l 你应该可以看到Dependencies项目被列了出来。点击“Finish”。
接下来,我们需要导入每章的源码ZIP文件。假设你已经解压了第二章:Spring Security起步的源码到目录中。
l 选择“File”菜单以及“Import…”选项。选择“General”文件夹以及“Existing Projects into Workspace”。点击“Next”;
l 确保“Select root directory”选项被选中并点击“Browse…”按钮到文本框。定位到你解压第二章源码ZIP文件的目录并点击“OK”;
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
以下的URL被Spring 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声明启用方法安全的完整配置:
<!-- ************************************************** --> <!-- 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 |
评论
发表评论
-
《Spring In Action》第三版译序
2013-07-12 12:19 3032《Spring In Action》第三 ... -
Tomcat源码解读系列(四)——Tomcat类加载机制概述
2012-09-23 22:23 10430声明:源码版本为Tomcat 6.0.35 ... -
Tomcat源码解读系列(三)——Tomcat对HTTP请求处理的整体流程
2012-09-09 22:34 6913声明:源码版本为Tomcat 6.0.35 前面的文章 ... -
Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
2012-09-02 16:59 6341声明:源码版本为Tom ... -
Tomcat源码解读系列(一)——server.xml文件的配置
2012-08-25 07:31 6439Tomcat是JEE开发人员最常用到的开发工具,在Jav ... -
Spring Security 3全文下载
2012-03-15 20:31 20364本书已经翻译完成,提供给大家下载 以下地址为ITEYE的电子 ... -
《Spring Security3》第十三章翻译(迁移到Spring Security 3)
2012-02-13 22:50 5322第十三章 迁移到Spring Security 3 ... -
《Spring Security3》第十二章翻译(Spring Security扩展)
2012-02-13 22:38 7965第十二章 Spring Security扩展 ... -
《Spring Security3》第十一章(客户端证书认证)第二部分翻译
2012-02-13 22:23 4919在Spring Security中配置客户端证书认证 ... -
《Spring Security3》第十一章(客户端证书认证)第一部分翻译
2012-02-13 22:00 6197第十一章 客户端证书认证(Client Cert ... -
《Spring Security3》第十章(CAS)第二部分翻译(CAS高级配置)
2012-01-19 13:07 8626高级CAS配置 ... -
《Spring Security3》第十章(CAS)第一部分翻译(CAS基本配置)
2012-01-19 12:54 12332第十章 使用中心认证服务(CAS)进行单点登录 ... -
《Spring Security3》第九章(LDAP)第三部分翻译(LDAP明确配置)
2012-01-19 12:44 6445明确的LDAP bean配置 ... -
《Spring Security3》第九章(LDAP)第二部分翻译(LDAP高级配置)
2012-01-19 12:36 7177LDAP的高级配置 一旦我们 ... -
《Spring Security3》第九章(LDAP)第一部分翻译(LDAP基本配置)
2012-01-19 12:22 6172第九章 LDAP目录服务 在本章中,我们 ... -
《Spring Security3》第八章第三部分翻译(属性交换)
2012-01-18 15:46 2928属性交换(Attribute Exchange) ... -
《Spring Security3》第八章第二部分翻译(OpenID用户的注册)
2012-01-18 13:39 5397OpenID用户的注册问 ... -
《Spring Security3》第八章第一部分翻译(OpenID与Spring Security)
2012-01-17 22:38 7560第八章 对OpenID开放 OpenID是 ... -
《Spring Security3》第七章第三部分翻译(ACL的注意事项)
2012-01-17 22:25 2700典型ACL部署所要考虑的事情 ... -
《Spring Security3》第七章第二部分翻译(高级ACL)(下)
2012-01-17 22:17 4200支持ACL的Spring表达式语言 SpEL对A ...
相关推荐
Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...
文档中提到使用的是Spring Security 2.0.5.RELEASE版本,包括`spring-security-acl`, `spring-security-core`, `spring-security-core-tiger` 和 `spring-security-taglibs`等组件。这些版本可能较旧,但它们展示了...
如果你想要更深入的信息,推荐查阅Spring官方参考指南(www.springsource.org)或书籍,如《Pro Spring 3》(Apress,2012)或《Spring Recipes, 2nd Edition》(Apress,2011)。 首先,让我们快速浏览一下Spring...
1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 Spring 项目的搭建 9 1.3 Spring 基础配置 17 1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 ...
8. **附录A.pdf**可能包含了书中的补充资料,例如案例研究、最佳实践或者更深入的技术解析。 9. **源码**:提供的源码可能涵盖了书中示例项目的完整代码,读者可以通过阅读和运行这些代码来加深理解。 10. **章节...
7.4.1 代理Spring Security的过滤器 7.4.2 处理安全上下文 7.4.3 提示用户登录 7.4.4 处理安全例外 7.4.5 强制Web安全性 7.4.6 确保一个安全的通道 7.5 视图层安全 7.5.1 有条件地渲染内容 7.5.2 显示用户...
Spring是目前非常流行的Java应用框架,其提供了丰富的开发组件,WS(Web Service)是其中重要的组成部分。Web Service是一种基于Web的分布式计算技术,它使得不同应用程序能够通过Internet通信和交互。Spring对WS的...
虽然附录部分未被翻译,但整体上该文档提供了非常详尽且全面的Spring框架介绍。下面将从几个方面来总结和解释Spring 2.0的主要知识点。 ### 一、Spring框架概述 Spring框架是一个开源的Java平台,它为开发企业级...
1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 Spring 项目的搭建 9 1.3 Spring 基础配置 17 1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 ...
7.4.1代理springsecurity的过滤器 7.4.2处理安全上下文 7.4.3提示用户登录 7.4.4处理安全例外 7.4.5强制web安全性 7.4.6确保一个安全的通道 7.5视图层安全 7.5.1有条件地渲染内容 7.5.2显示用户身份验证信息...
7.4.1 代理Spring Security的过滤器 7.4.2 处理安全上下文 7.4.3 提示用户登录 7.4.4 处理安全例外 7.4.5 强制Web安全性 7.4.6 确保一个安全的通道 7.5 视图层安全 7.5.1 有条件地渲染内容 7.5.2 显示用户...
- **安全机制**:这部分讲解了如何使用Spring Security来保护Spring应用程序的安全性,包括身份验证、授权等。 #### 四、附录内容概览 **附录A:开始使用Spring框架** - **下载与安装**:介绍了如何下载Spring...
1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 Spring 项目的搭建 9 1.3 Spring 基础配置 17 1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 ...
【使用 XFire 与 Spring 开发 Web Service】 Web Service是一种基于标准协议的接口,它允许不同应用程序之间进行互操作性,不受平台或编程语言限制。XFire是Apache CXF项目的一部分,是一个轻量级的、高性能的Java ...
44 第3 章 Spring 高级话题 .... ............................ 48 3.1 Spring Aware .... ..................................... 48 3.2 多线程 .... .... ......... 51 3.3 计划任务 .... .... ..... 54 3.4 ...
CAS可以和SpringSecurity进行整合,以提供更加安全的认证环境。整合过程包括环境配置、web.xml配置、applicationContext-security.xml配置等。 #### 五、常见问题解答 文档中提到了许多常见问题及其解决方案,例如...