返回列表 发帖

[原创] [翻译]Spring Security参考文档

前言

Spring Security为基于J2EE企业应用软件提供了全面的安全解决方案。正如你会发现通过本参考手册的尝试,我们试着向你提供一个有用的和高度的可配置的安全系统。

安全是一个永恒的目标,它重要追求的是综合的、系统级的实现方式。在安全领域我们鼓励您采用“分层安全”,这样每一层在自己的范围内都能尽可能得做到安全,并为连续的层之间提供额外的安全。每一层越“坚固”,您的系统将越强壮和安全。为了减轻“中间人”(man-in-the-middle)的攻击,在底层您将会处理诸如传输安全和系统认证。接下来您将可能用到防火墙,也许还会用到VPN或者IP策略来确保只有授权的系统可以尝试连接。在企业环境中您可能部署一个DMZ(demilitarized zone,隔离区)来把面向公众的服务器和后端的数据和应用服务器分隔开。您的操作系统也将发挥重要的作用,在解决诸如为非授权用户运行进程和文件系统安全最大化上。一个操作系统通常也会配置自己的防火墙。希望在前进的道路上,你能有效地防止拒绝服务攻击和暴力攻击系统。入侵检测系统在检测和应对攻击方面尤其有用,这种系统能够采取诸如实时地阻止非法TCP/IP地址的保护措施。在更高的层上,你的Java虚拟机需要进行配置,将授予不同Java类型的权限最小化,然后,您的应用程序将添加针对自己特定问题域的安全配置。Spring Security使后者应用程序安全更容易。


当然,您将需要妥善处理如上所述的所有安全层,再加上管理因素,它涵盖了各个层面。一份非详细的包含管理因素的清单可能包括安全公告监测,补丁,人工诊断,审计,变更管理,工程管理系统,数据备份,灾难恢复,性能基准,负载监测,集中日志记录,应急反应程序等。

Spring Security着重帮助您处理企业应用安全层,你会发现各式各样的需求和商业问题领域一样多。银行的应用和电子商务应用有不同的需求。电子商务应用和公司销售人员的自动化工具又有不同的需求。这些客户化的需求使得应用安全显得有趣,富有挑战性和满足感。

本参考手册已大量修改已经发行的Spring Security 1.0.0(当时名为Acegi Security)。请阅读第一部分总体结构的所有内容。其余部分的参考指南,在结构上更多参考传统的文档作风,旨在有利于在原有的基础上阅读。

我们希望您觉得这是有用的参考指南,我们对此欢迎您提供意见和建议。

最后,欢迎访问Spring Security社区。







第一部分. 入门

本指南的后面部分提供了一个深入讨论的框架结构和各个实现类,如果您需要做任何安全的定制,理解这些是非常重要的。在这部分中,我们将介绍Spring Security 2.0,给予简要概述该项目的历史,并采取稍微温和地方式看看如何开始使用该框架。事实上,我们将会看到命名空间的配置,它提供了更简单的方式来保护你的系统,而区别于传统的使用Spring bean的方式,不得不为各个实现类配置成bean。

我们也将看看可用的例子应用程序。这是值得尝试去运行这些例子的,值得在阅读后面的部分之前对例子进行实验---随着你增加对框架的理解,你可以先浏览后面的部分。

































第一章简介
1.1.什么是Spring Security?

Spring Security为基于J2EE的企业应用软件提供全面的安全服务。它特别强调和支持在项目中使用Spring框架,Spring框架为企业软件开发提供领先的J2EE解决方案。如果您没有使用Spring来开发企业应用,我们强烈鼓励您仔细看看它。熟悉Spring框架,特别是依赖注入原则将有利于帮助您更方便地掌握Spring Security。

人们使用Spring Security有很多原因,不过通常吸引他们到这个项目的原因是他们在J2EE的Servlet规范或者EJB规范中找不到迫切需要的典型企业应用场景。提到这些规范,特别值得一提的是他们在WAR或者EAR级别是不可移植的。因此,如果您切换服务器,一般来说您要在目标环境中花费很多工夫来重新配置您的应用安全。使用Spring Security可以解决了这些问题,并且为您提供了很多其他有用的,完全可定制的安全特性。

正如你所知,安全包含2个主要的操作。第一个被称为“认证”,是为用户建立一个它所声明的principal。Principal通常代表用户,设备,或者能在你的应用中执行操作的其他系统。“授权”指判定一个principal能否在你的系统中执行某个操作。在到达授权判断之前,principal的身份认证已经由认证过程执行过了。这些概念是通用的,而不是Spring Security特有的。

在认证层面上,Spring Security广泛支持各种认证模式。这些认证模式绝大多数是第三方提供,或者是由相关的标准组织开发的,例如Internet Engineering Task Force。作为补充,Spring Security提供了一些自己认证功能。具体来说,Spring Security当前支持如下的认证技术:

• HTTP BASIC authentication headers (an IEFT RFC-based standard)

• HTTP Digest authentication headers (an IEFT RFC-based standard)

• HTTP X.509 client certificate exchange (an IEFT RFC-based standard)

• LDAP (a very common approach to cross-platform authentication needs, especially in large environments)

• Form-based authentication (for simple user interface needs)

• OpenID authentication

• Computer Associates Siteminder

• JA-SIG Central Authentication Service (otherwise known as CAS, which is a popular open source single sign on system)

• Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol)

• Automatic "remember-me" authentication (so you can tick a box to avoid re-authentication for a predetermined period of time)

• Anonymous authentication (allowing every call to automatically assume a particular security identity)

• Run-as authentication (which is useful if one call should proceed with a different security identity)

• Java Authentication and Authorization Service (JAAS)

• Container integration with JBoss, Jetty, Resin and Tomcat (so you can still use Container Manager Authentication if desired)

• Java Open Source Single Sign On (JOSSO) *

• OpenNMS Network Management Platform *

• AppFuse *

• AndroMDA *

• Mule ESB *

• Direct Web Request (DWR) *

• Grails *

• Tapestry *

• JTrac *

• Jasypt *

• Roller *

• Elastic Plath *

• Atlassian Crowd *

你自己的认证系统(如下所示)

(*是表示由第三方提供的,检查我们的整合网页,链接到最新详情)

很多独立软件供应商(ISVs)选择Spring Security是因为它具有丰富的认证模块。这样无论他们的最终客户需要什么,他们都可以快速集成到他们的系统中,不用花很多工夫或者让客户改变环境。如果上述所有认证模块还没有满足您的需求的话,Spring Security是一个开放的系统,您很容易写自己的认证机制。许多Spring Security的企业用户需要整合 “遗留”系统,这些遗留系统不遵循任何安全标准,Spring Security能够和这样的系统“合作愉快”。

有时候仅仅只有认证的过程是不够。有时候你需要根据principal和应用交互的方式来采用不同的安全措施。例如,你可能为了防止密码被窃取,或者防止终端用户受到“中间人”的攻击,需要确保到达的是请求是通过HTTPS的。或者,你要确保发送请求的是一个真正的人而不是某种机器人或者自动进程。这对于保护密码恢复过程不受到暴力破解的攻击,或者防止他人很容易的复制你应用的关键内容是极其有帮助的。为了帮助你实现这些目标,Spring Security完全支持自动“通道安全”,以及集成Jcaptcha来检测是否是真正的人类用户在使用。

不管认证是如何执行的,Spring Security还提供了一套完备的授权功能。在授权方面主要有三个领域,授权web请求、授权方法调用和授权存取单个领域对象实例。为了帮助你理解这些区别,对照考虑一下Servlet规范中的web模式安全的授权功能、EJB容器管理安全以及文件系统安全。Spring Security提供了所有这些重要领域的完备功能,我们将在本手册的后面介绍这些功能。

1.2. 历史

Spring Security始于2003年晚期作为"The Acegi Security System for Spring"。在Spring Developers邮件列表中有人提问是否有人考虑提供一个基于Spring的安全实现。当时,Spring的社区是相对较小的(尤其是和今天相比!),实际上Spring本身也是在2003年早期才作为一个SourceForge项目出现的。虽然限于当时的时间无法进行深入,但对此问题的回应是它确实是一个值得研究的领域。

在这种情况下,一个简单的安全实现被构建出来,但是没有发布。几周后,Spring社区的其他成员又询问了关于安全的实现,同时代码就提供给了他们。随后又有人提出了询问,到了2004年一月,大约有20人左右在使用这些代码。另外一些人加入到这些先驱用户中来,他们建议建立一个SourceForge项目,这个项目在2004年3月建立起来。

在早期,这个项目还没有它自己的认证模块。认证过程依赖容器管理安全,而Acegi Security注重授权。在一开始这样是合适的,但是随着越来越多的用户要求提供额外的容器支持,这种基于容器的认证的限制就显现出来了。另外一个相关的问题是添加新的JAR文件到容器的classpath中,这个公共的源代码通常会让最终用户感到困惑并且配置错误。

Acegi Security随后加入了认证服务。大约一年以后,Acegi Security成为了一个Spring框架的官方子项目。在多达2年半的时间里,多个软件项目中积极地使用它,并且经过数以百计的改进和社区贡献,1.0.0最终版在2006年5月发布。

在2007年底,Acegi Security正式成为Spring Portfolio项目,并更名为“Spring Security”。

今天,Spring Security拥有一个强大而活跃的开源社区。在社区支持的论坛上拥有数以千计的帖子。有活跃的核心开发人员进行编码工作,还有一个活跃的社区也定期共享补丁并相互间进行帮助支持。

1.3. 发行版本号

理解Spring Security的版本号是非常有好处的,它可以帮助你判定升级到新版本是否需要花费很大的精力。我们的正式发行版本使用Apache Portable Runtime Project版本指引,可以通过访问网站进行查看http://apr.apache.org/versioning.html。为了方便您查看,我们引用该网页的说明部分如下:

“版本号由三个部分的整数组成:主版本号(MAJOR)、副版本号(MINOR)、补丁版本号(PATCH)。主要的含义是主版本号(MAJOR)是不兼容的,大规模升级API。副版本号(MINOR)保持源文件、可执行二进制文件与老版本的兼容,补丁版本号(PATCH)则意味着向前和向后的完全兼容”。

1

评分人数

  • chinanic

天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

翻译的可以,希望LZ能坚持下去。
逆境是成长必经的过程,能勇于接受逆境的人,生命就会日渐的茁壮。

TOP

翻译到哪算到哪,一共90页的文档,目前翻译了4页。不过会翻译完一章发一章的

现在才体会翻译的艰辛,的确是用艰辛2个字,本来翻译到第二段就打退堂鼓了。。。
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

这么多E文真!头大!!

TOP

第二章
安全命名空间配置

2.1. 简介

Spring框架2.0版本以后开始支持命名空间的配置。它允许你使用额外的XML schema的元素来补充传统的Spring bean应用上下文的语法。你可以在Spring的参考文档中发现更多信息。一个命名空间的元素可以方便地使用更简洁的方式配置bean,更为强大的是,它可以定义可供选择的配置语法,这些语法更贴近问题领域和隐藏用户的复杂性。一个简单的元素可能隐藏着多个bean以及将要添加到应用上下文的处理步骤。举例来说,把下面安全命名空间的元素添加到应用上下文中,将会开启应用中用于测试的嵌入式LDAP服务器。

<security:ldap-server />

这比起写等价的Apache Directory Server beans来说简洁得多。最常见替代配置方式的要求是支持ldap-server元素的属性以及用户能够区分需要配置哪些beans和bean的属性名称。使用一个良好的XML编辑器,来编辑应用上下文中可提供的属性信息和可利用的元素。

我们将推荐您尝试使用SpringSource的开发工具套件,因为它对Spring portfolio命名空间的使用具有特别的功能。

在你的应用上下文中开始使用安全命名空间,你所需要做的是添加schema声明到应用上下文中:

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:security="http://www.springframework.org/schema/security"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/s ... org/schema/security http://www.springframework.org/schema/security/spring-...

</beans>


在许多例子的应用中,我们通常会使用"security"作为默认的名字空间,而不是使用"beans",这意味着我们可以省略所有安全命名空间元素的前缀,使上下文更易于阅读。

你也可能这样做,将你的应用上下文内容分割到几个文件中,将你大多数的安全配置放在一个配置文件中。你的安全应用上下文文件可能以这样开始:

beans:beans xmlns="http://www.springframework.org/schema/security"

xmlns:beans="http://www.springframework.org/schema/beans">

...

</beans:beans>


从现在起,在这一章中我们将采用这一语法。

2.1.1. 命名空间的设计

命名空间的设计是用于实现最常见的用途,并在应用中使用命名空间提供的简单明了的语。设计很大程度上依赖于框架,它可划分为以下几个方面:

Web/HTTP Security 最复杂的部分。设置过滤器和相关用于应用框架认证机制的业务bean,以确保URL安全、提供登录和返回错误页面等更多的工作。

Business Object (Method) Security 确保业务层安全的选项。

AuthenticationManager 处理来自框架内其他部分的认证请求。

AccessDecisionManager 提供适用于Web及方法安全的访问决策。默认的AccessDecisionManager将被注册到应用上下文,但是你也可以自定义一个AccessDecisionManager,并使用传统的Spring bean的语法。

AuthenticationProviders – 通过认证管理器来验证用户的机制。该命名空间支持一些标准的选项,它也支持通过自定义的bean来使用传统语法的方式。

UserDetailsService 与认证提供者紧密相关,它往往也是其他bean所必需的属性。

在下面的各节中,我们将看到如何一起使用它们。

2.2. 安全命名空间配置入门

在本节中,我们将看到如何通过建立一个命名空间的配置来使用框架内的一些主要功能。让我们假设您最初的想法是建立一个尽可能快速运行的,增加认证支持和访问控制的web应用,并在应用中伴随一系列的测试。然后我们将看到如何通过数据库或其他安全信息库来应对认证的改变。在以后的章节中,我们将会介绍更多高级的命名空间配置用法。

2.2.1. web.xml 的配置

你所需要做的第一件事是在web.xml中添加如下的过滤器:

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

这提供了一个嵌入到Spring Security的Web架构..然后您开始准备编辑您的应用上下文文件。Web安全服务通过<http>元素来进行配置。

2.2.2. 最简单的<http>配置

你所需要确保web安全应以如下方式开始:

<http auto-config='true'>

<intercept-url pattern="/**" access="ROLE_USER" />

</http>

这就是说我们想让应用中的所有的URL都被保护,只有拥有ROLE_USER权限才能访问他们。

Note

你可以使用多个<intercept-url>元素来定义不同的URL访问策略,但是他们也会对顺序列表进行评估,第一个被匹配的元素将被使用。因此你尽量把最可能匹配的元素放在上面。

你可以直接在命名空间中定义一组测试数据,来添加一些用户:

<authentication-provider>

<user-service>

<user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />

<user name="bob" password="bobspassword" authorities="ROLE_USER" />

</user-service>

</authentication-provider>


如果你熟悉框架的先前版本,你可能已经大致猜到接下来要做什么。<http>元素负责创建FilterChainProxy和它所使用的过滤器bean。共同的问题类似于过滤器的顺序问题将不再是一个问题了,因为过滤器的位置已经被预定义好了。<authentication-provider>素创建了一个DaoAuthenticationProviderbean<user-service>元素创建了一个InMemoryDaoImpl一个ProviderManager bean总是由命名空间来创建,DaoAuthenticationProvider则伴随着ProviderManager的创建而自动注册。


上面的配置定义了2个用户,包括他们的密码和系统中的角色(将被用于访问控制)。在<user-service>中也可以通过使用properties属性的标准属性文件来加载用户信息。查看8.2.1小节可以获取更多详细信息。使用<authentication-provider>元素意味着,用户信息将通过authentication manager来处理认证请求。

在这一点上,你应该启动你的应用程序,把需要的处理过程记录在日志中。尝试一下吧,或者尝试使用Spring Security框架自带的"tutorial"中的例子。上述的配置,实际上在应用中增加了很少的服务,因为我们已经使用了自动配置的属性。举例来说,表单登陆过程和"remember-me"服务是自动启用的。

2.2.2.1.自动配置包含了什么?

自动配置属性,正如下面我们所使用的,是一个简写的语法:

<http>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login />

<anonymous />

<http-basic />

<logout />

<remember-me />

</http>

其余元素分别负责处理form-login、匿名认证、基本认证、退出处理和remember-me服务。这些元素都有改变自身行为的属性。

2.2.2.2.表单和基本的登陆选项

当您想登陆的时候,您可能想知道登录的表单在哪里,因为我们没有提及任何的HTML和JSP文件。事实上,如果我们没有定义登录页面的URL,Spring Security会自动地生成一个,它含有基本的功能、使用标准的值为URL处理提交登陆、用户向默认的目标URL发送消息等等。然而,命名空间对允许你自定义这些选项提供了大量的支持。举例来说,如果你想提供自己的登录页面,你可以使用:

<http auto-config='true'>

<intercept-url pattern="/login.jsp*" filters="none"/>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page='/login.jsp'/>

</http


注意,您仍然可以使用自动配置。form-login元素只覆盖默认的设置。同时也注意到我们增加了一个额外的intercept-url元素来说明任何登陆页面的请求应该由安全过滤器处理。另外,这些请求由/**模式来匹配的话,它便不可能进入自身的登录页面!如果你想用基本的认证替代表单登陆,可以这样改变配置

<http auto-config='true'>

<intercept-url pattern="/**" access="ROLE_USER" />

<http-basic />

</http>



基本的认证将会优先处理,当用户尝试访问被保护的资源时,它将用于提示用户登录。如果你想使用表单登录的话,它仍然可以使用,例如通过一个登录表单嵌入到别的web页面。

2.2.3. 使用其它的Authentication Providers

在实践中,你将需要一个更具扩展性的用户信息来源,而不是在应用上下文中添加一些名字。最有可能的是,你将你的用户信息存储在数据库中或者是一个LDAP服务器中。LDAP命名空间配置的介绍在LDAP那一章,因为词在这里我们不介绍它。如果在你的应用上下文中,有一个叫做"myUserDetailsService"的bean,它自定义实现Spring Security的UserDetailsService服务,你可以使用如下的方式来进行验证。

<authentication-provider user-service-ref='myUserDetailsService'/>



如果你想使用数据库,那么你可以这样做

<authentication-provider>

<jdbc-user-service data-source-ref="securityDataSource"/>

</authentication-provider>



在应用上下文中"securityDataSource"是DataSource bean的名称,它引用了包含标准Spring Security用户数据表的数据库。另外,你也可以配置一个Spring Security的 JdbcDaoImpl bean,并且在user-service-ref属性中引用它。

2.2.3.1. 增加一个密码编码器

通常你的密码通过哈希算法进行加密。在框架中我们使用<password-encoder>元素来给密码进行加密。通过SHA算法来加密,原来的authentication provider的配置可能是这样的:

<authentication-provider>

<password-encoder hash="sha"/>

<user-service>

<user name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />

<user name="bob" password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />

</user-service>

</authentication-provider>


当你使用哈希算法加密时,使用密钥来保护密码防止字典攻击是一个不错的主意,并且Spring Security也支持这种方式。最理想的情况,你可以为每一个用户提供一个随机生成的密钥,但是你也可以使用UserDetails对象的任何属性来加载你自己的UserDetailsService。例如,你可以这样使用username属性。

<password-encoder hash="sha">

<salt-source user-property="username"/>

</password-encoder>

你可以通过引用password-encoder属性来自定义加密算法的bean。在应用上下文中应该包含这个bean,它用于替代Spring Security的加密算法的接口。

2.3. 高级的Web特性

2.3.1. 增加HTTP/HTTPS信道安全

如果你的应用程序既支持HTTP协议又支持HTTPS协议,并且一些特殊的网址只能通过HTTPS协议访问,那么在<intercept-url>元素中直接使用requires-channel属性即可。

<http>

<intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/>

<intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/>

...

</http>

在上面的配置中,如果用户尝试通过HTTP来访问匹配"/secure/**"的网址,他们将首先被重定向到一个HTTPS的网址。可供选择的选项包括"http", "https"和"any"。使用"any"的属性值意味着通过HTTP或者HTTPS都可以访问。

如果你的应用程序没有使用默认的HTTP端口或HTTPS端口,你也可以下面的方式来映射一组端口:

<http>

...

<port-mappings>

<port-mapping http="9080" https="9443"/>

</port-mappings>

</http>

你可以在第七章信道安全中,更深入地讨论信道的安全。

2.3.2.并发Session控制

如果你想在你的应用程序中限制单个用户的登录能力,Spring Security通过如下的步骤来支持这种方式。首先,你需要在web.xml文件中添加如下的listener,它可以使Spring Security更新session的生命周期事件:

<listener>

<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher

</listener-class>

</listener>

然后在应用上下文中添加以下行:

<http>

...

<concurrent-session-control max-sessions="1" />

</http>

这将防止用户在同一时间多次登录——第二次登录将导致第一次登录失效。如果你通常喜欢使用防止第二次登录的做法,在这种情况下,你可以使用:

<http>

...

<concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/>

</http>

第二次登录将会被拒绝。

2.3.3. OpenID 登录

命名空间支持OpenID的方式登录,与普通的基于表单登录需要做如下的改变:

<http auto-config='true'>

<intercept-url pattern="/**" access="ROLE_USER" />

<openid-login />

</http>

你应该在OpenID提供商 (例如myopenid.com)注册一个账号,并在in-memory <user-service>中增加你的个人信息

<user name="http://jimi.hendrix.myopenid.com/" password="notused" authorities="ROLE_USER" />

你可以登录使用myopenid.com网站来验证。

2.3.4.添加你自己的过滤器

如果你曾经使用过Spring Security,你应该知道这个框架通过一组过滤器链来实现它的功能。你可能想要在配置文件中增加自己的过滤器,或者使用已经存在的定制版的过滤器。由于过滤器链没有直接暴露,你如何在命名空间中进行配置。

当使用命名空间时,过滤器始终按照严格的顺序进行配置。每个Spring Security过滤器都实现Spring中相应的接口,过滤器在初始化时就被排序好了。标准的过滤器在命名空间中都有别名:

Table 2.1. 标准过滤器的别名和排序

Alias

Filter Class

CHANNEL_FILTER

ChannelProcessingFilter

CONCURRENT_SESSION_FILTER

ConcurrentSessionFilter

SESSION_CONTEXT_INTEGRATION_FILTER

HttpSessionContextIntegrationFilter

LOGOUT_FILTER

LogoutFilter

X509_FILTER

X509PreAuthenticatedProcessigFilter

PRE_AUTH_FILTER

Subclass of AstractPreAuthenticatedProcessingFilter

CAS_PROCESSING_FILTER

CasProcessingFilter

AUTHENTICATION_PROCESSING_FILTER

AuthenticationProcessingFilter

BASIC_PROCESSING_FILTER

BasicProcessingFilter

SERVLET_API_SUPPORT_FILTER

classname

REMEMBER_ME_FILTER

RememberMeProcessingFilter

ANONYMOUS_FILTER

AnonymousProcessingFilter

EXCEPTION_TRANSLATION_FILTER

ExceptionTranslationFilter

NTLM_FILTER

NtlmProcessingFilter

FILTER_SECURITY_INTERCEPTOR

FilterSecurityInterceptor

SWITCH_USER_FILTER

SwitchUserProcessingFilter

你可以在配置文件中添加自己的过滤器,使用custom-filter元素并指定过滤器的位置:

<beans:bean id="myFilter" class="com.mycompany.MySpecialAuthenticationFilter">

<custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/>

</beans:bean>



在配置文件中,如果你的过滤器将被配置在别的过滤器之前或者之后,你可以使用before或者after属性。"FIRST" 和 "LAST"名称代表你的过滤器将分别出现在整个配置文件的最前面和最后面。

2.3.5. Session Fixation攻击的保护

Session fixation攻击是一个潜在的危险,一个恶意的攻击者可能通过访问一个网站来创建一个Session,并劝说别的用户使用相同的Session来登录(例如,通过发送他们的链接包含session标识作为参数)。Spring Security通过每次自动创建一个新的Session,保护了用户自动登录的情况。如果你不需要这种保护,或者它与其他的需求相冲突,你可以通过<http>元素的session-fixation-protection属性来控制它,它包含3个选项:

migrateSession -
创建一个新的sesion,拷贝原来session的属性到新的session中。这是默认的情况。

none - 不做任何事,原来的session将被保留。

newSession - 创建一个新的“干净的”session,不拷贝已存在session的数据。

2.3.6. 设置一个自定义的AuthenticationEntryPoint

如果你在命名空间中不使用表单登陆、OpenID或者基本认证,你可能想使用传统的bean语法定义一个认证过滤器和切入点,并把他们配置在命名空间中。你可以使用2.3.4小节“添加你自己的过滤器”中的例子说明来添加过滤器。相应地,使用<http>元素的entry-point-ref属性可以设置AuthenticationEntryPoint。

CAS的事例是一个在配置文件中使用自定义的bean,并包含这些语法的好例子。

2.4. 方法安全

Spring Security 2.0已经对业务层方法的安全提供极大的支持。如果你使用Java5或者更高的版本,它提供支持JSR-250的安全注解,同时也提供框架的原生@secured注解。你可以在单个bean中应用安全框架,在bean中使用intercept-methods元素来声明它,你也可以使用AspectJ 风格的切点跨越整个业务层将安全框架应用到多个bean中。

2.4.1. <global-method-security> 元素

这个元素使得你的应用程序可以使用基于安全的注解(通过在元素中设置合适的属性),也可以在整个应用上下文中使用一组安全切点声明。你只能申明一个<global-method-security>元素。下面的声明将支持2种类型的注解:

<global-method-security secured-annotations="enabled" jsr250-annotations="true"/>

2.4.1.1. 使用protect-pointcut来添加安全切点

protect-pointcut的功能是非常强大的,因为它允许你使用一段简单的声明在多个bean中使用安全框架。来看一下如下的例子:

<global-method-security>

<protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>

</global-method-security>

这将会保护所有在应用上下文中通过bean定义的,并且类在com.mycompany包下以及类的命名以"Service"结尾的业务方法。只有拥有ROLE_USER权限的用户才能调用这些方法。正如URL的匹配方式,最匹配的应该首先出现在切点列表中,因为将使用第一个匹配的表达式。

2.5. 默认的AccessDecisionManager

这一小节假设你理解Spring Security访问控制的底层架构的内容。如果你没有,你可以跳过它稍后再回来。因为这一小节的内容仅仅是提供给那些需要使用比基于角色安全机制更为复杂,并需要作一些自定义的人们。

当你使用命名空间的配置时,一个默认的AccessDecisionManager实例将被自动注册,它将为方法调用和URL进行访问控制,你可以在intercept-url和protect-pointcut元素中声明访问控制属性(如果你使用安全方法的注解,也可以在注解中声明访问控制)。

2.5.1. 自定义AccessDecisionManager

如果你需要使用一个比较复杂的访问控制策略,那么设置一个包括方法和web安全的备选是很简单的。

对于方法安全,你通过在global-security中设置access-decision-manager-ref属性来引用在应用上下文中适当的AccessDecisionManager的bean.

<global-method-security access-decision-manager-ref="myAccessDecisionManagerBean">

...

</global-method-security>

Web安全的语法是相同的,但是在http元素中:

<http access-decision-manager-ref="myAccessDecisionManagerBean">

...

</http>

2.5.2. 认证管理器

我们已经谈了在命名空间的配置中自动注册认证管理器bean的想法。这是一个Spring Security的ProviderManager类的实例,如果你曾经使用过框架那么你可能已经熟悉它了。

你可能想通过ProviderManager注册额外的AuthenticationProvider的bean,那么你可以在bean中使用<custom-authentication-provider>元素来实现它。例如:

<bean id="casAuthenticationProvider"

class="org.springframework.security.providers.cas.CasAuthenticationProvider">

<security:custom-authentication-provider />

...

</bean>

另一个常见的要求是,在应用上下文的另一个bean中可能需要引用AuthenticationManager。有一个特殊的元素可以让你为AuthenticationManager注册别名,然后你可以在应用上下文的其它地方使用这个别名。

<security:authentication-manager alias="authenticationManager"/>

<bean id="casProcessingFilter" class="org.springframework.security.ui.cas.CasProcessingFilter">

<security:custom-filter position="CAS_PROCESSING_FILTER"/>

<property name="authenticationManager" ref="authenticationManager"/>

...

</bean>

天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

从word里面拷过来的
排版有问题
明天争取把1-4章做一个pdf放上来
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

期待LZ一直翻译
逆境是成长必经的过程,能勇于接受逆境的人,生命就会日渐的茁壮。

TOP

第三章
例子应用

3.1. 附带的例子

Spring Security附带的例子是一个非常好的基本例子,可以带你入门。它使用简单的命名空间来配置整个框架。

编译好的例子打包到zip文件里面,你随时可以部署到你的web容器中。它使用了基于表单的认证机制,同时还采用非常普遍并且通过cookies实现自动登录的remember-me认证。

我们推荐你开始学习附带的例子,因为xml配置是最小的并且很容易跟着学习。最重要的是,你可以方便地添加这一个XML文件(及其相应的web.xml文件)到你现有的应用程序中。当基本整合完成时,我们建议你尝试添加方法认证或领域对象的安全。

3.2. 通讯录

这个通讯录例子是相当先进的,除了基本的应用安全外,它还阐述了功能更为强大的领域对象访问控制列表。

示例程序包含Spring Security所需要的包,直接把war文件放到web容器的webapps目录就可以部署了。这个war文件叫做spring-security-samples-contacts-2.0.0.war(所附的版本号码取决于你正在使用的版本)。

在开启你的web容器后,检查应用程序是否能装载。访问http://localhost:8080/contacts(或者URL是适合你的web容器和你部署的war文件的)。


     下一步,点击"Debug"。系统会提示你需要验证,你需要填写一系列的用户名和密码在那个页面上。简单地认证这些并察看结果页面。它应该包含一个类似下列的成功的信息:

Authentication object is of type: org.springframework.security.providers.UsernamePasswordAuthenticationToken

Authentication object as a String:

org.springframework.security.providers.UsernamePasswordAuthenticationToken@1f127853:

Principal: org.springframework.security.userdetails.User@b07ed00:

Username: rod; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;

credentialsNonExpired: true; AccountNonLocked: true;

Granted Authorities: ROLE_SUPERVISOR, ROLE_USER; Password: [PROTECTED]; Authenticated: true;

Details: org.springframework.security.ui.WebAuthenticationDetails@0:

RemoteIpAddress: 127.0.0.1; SessionId: k5qypsawgpwb;

Granted Authorities: ROLE_SUPERVISOR, ROLE_USER

Authentication object holds the following granted authorities:

ROLE_SUPERVISOR (getAuthority(): ROLE_SUPERVISOR)

ROLE_USER (getAuthority(): ROLE_USER)
SUCCESS! Your web filters appear to be properly configured!


当你成功获得上述信息后,返回到示例应用程序的首页,并点击“管理” 。然后你可以尝试使用这个应用程序。通讯录能显示当前存入的用户,只有拥有ROLE_SUPERVISOR权限的用户才能删除它们的通讯录。在幕后,MethodSecurityInterceptor确保业务对象的安全。

应用程序允许你修改分配给不同通讯录的访问控制列表。通过查看基于XML的应用上下文,确保尝试理解它如何运行的。



[ 本帖最后由 风灵风之子 于 2008-5-25 23:31 编辑 ]
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

翻译到第四章时
word突然出问题,明天再加上
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP



参考文档的第一部分翻译完毕,包括1-4章的内容
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

下载量达到141了,没人说一下翻译质量?希望各位拍砖之。。。。

后面几章的翻译在6.23后陆续放上来。
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

TOP

下载量有一百多,说明LZ翻译的还是可以的。要是翻译的疑虑多,我想很多人即使不常来海岸线,也会来注册问下LZ哪里翻译的是不是有商榷的地方。
逆境是成长必经的过程,能勇于接受逆境的人,生命就会日渐的茁壮。

TOP

up

非常期待后续章节,,LZ辛苦了
     
      滴水穿石

TOP

.....................

lz 怎么还没有把后续章节放上来呀....等着呢

TOP

后续的刻有了

后续的刻有了:)

TOP

返回列表 回复 发帖