entry-point-ref 属性来进行设置。
CAS 示例程序是一个在命名空间中使用自定义bean 的好例子,包含这种语法。如果你对 认证入口点并不熟悉,可以在技术纵览章中找到关于它们的讨论。 2.4. 保护方法
从版本2.0开始Spring Security 大幅改善了对你的服务层方法添加安全。它提供对 JSR-250安全注解的支持,这与框架提供的@secured 注解相似。从3.0开始,你也可以 使用新的基于表达式的注解。你可以提供安全给单个bean,使用intercept-methods 来装 饰bean 的声明, 或者你可以控制多个bean,通过实体服务层,使用AspectJ 演示的切 点功能。
2.4.1.
这个元素用来在你的应用程序中启用基于安全的注解(通过在这个元素中设置响应的属性), 也可以用来声明将要应用在你的实体application context 中的安全切点组。你应该只定 义一个 向一个方法(或一个类或一个接口)添加注解,会限制对这个方法的访问。Spring Security 原生注解支持为方法定义一系列属性。这些属性将传递给AccessDecisionManager,进 行决策: public interface BankService { @Secured(\public Account readAccount(Long id); @Secured(\public Account[] findAccounts(); @Secured(\ public Account post(Account account, double amount); } 为了使用新的基于表达式的预付,你可以好似用 public interface BankService { @PreAuthorize(\ public Account readAccount(Long id); @PreAuthorize(\public Account[] findAccounts(); @PreAuthorize(\ public Account post(Account account, double amount); } 2.4.1.1. 使用protect-pointcut添加安全切点 protect-pointcut 是非常强大的,它让你可以用简单的声明对多个bean 的进行安全声明。 参考下面的例子: 这样会保护application context 中的符合条件的bean 的所有方法,这些bean 要在 com.mycompany 包下,类名以\结尾。ROLE_USER 的角色才能调用这些方 法。就像URL 匹配一样,指定的匹配要放在切点队列的最前面,第一个匹配的表达式才会 被用到。 2.5. 默认的AccessDecisionManager 这章假设你有一些Spring Security 权限控制有关的架构知识。如果没有,你可以跳过这 段,以后再来看,因为这章只是为了自定义的用户设置的,需要在简单基于角色安全的基础 上加一些客户化的东西。 当你使用命名空间配置时,默认的AccessDecisionManager 实例会自动注册,然后用来 为方法调用和web URL 访问做验证, 这些都是基于你设置的intercept-url 和 protect-pointcut 权限属性内容(和注解中的内容,如果你使用注解控制方法的权限)。 默认的策略是使用一个AffirmativeBased AccessDecisionManager ,以及RoleVoter 和AuthenticatedVoter。可以在authorization 中获得更多信息。 2.5.1. 自定义AccessDecisionManager 如果你需要使用一个更复杂的访问控制策略,把它设置给方法和web 安全是很简单的。 对于方法安全,你可以设置global-security 里的access-decision-manager-ref 属性, 用对应AccessDecisionManager bean 在application context 里的id: access-decision-manager-ref=\... web 安全安全的语法也是一样,但是放在http 元素里: 2.6. 验证管理器和命名空间 主要接口提供了验证服务在Spring Security 中, 是AuthenticationManager。通常 是Spring Security 中ProviderManager 类的一个实例, 如果你以前使用过框架,你可 能已经很熟悉了。如果没有,它会在稍后被提及,在#tech-intro-authentication。bean 实例被使用authentication-manager 命名空间元素注册。你不能好似用一个自定义的 AuthenticationManager 如果你使用HTTp 或方法安全,在命名空间中,但是它不应该 是一个问题, 因为你完全控制了使用的AuthenticationProvider。 你可能注册额外的AuthenticationProviderbean, 在ProviderManager 中,你可以使 用 class=\\ 另一个常见的需求是,上下文中的另一个bean 可能需要引用AuthenticationManager。 你可以为AuthenticationManager 注册一个别名,然后在application context 的其他 地方使用这个名字。 class=\ [1]你可以在LDAP 的章节里,找到更多有关使用的ldap-server 的元素。 [2]access 中逗号分隔的值的解释依赖使用的AccessDecisionManager 的实现。在Spring Security 3.0中,这个属性也可以使用EL 表达式。 [3]在3.0之前按,这里列表中还包含remember-me 功能。这是因为一些配置上容易冲突 的问题所以在3.0中被移除了。在3.0中,AnonymousAuthenticationFilter 已经成为了 默认的 [4] 参考匿名认证章节和AuthenticatedVoter 类获得更多细节, 和 IS_AUTHENTICATED_ANONYMOUSLY 如何被处理。 示例程序 项目中包含了很多web 实例程序。为了不让下载包变得太大,我们只把\和 \两个例子放到了zip 发布包里。你可以自己编译部署它们,也可以从Maven 中央资源库里获得单独的war 文件。我们建议你使用前一种方法。你可以按照简介里的介 绍获得源代码, 使用maven 编译它们也很简单。如果你需要的话, 可以在 http://www.springsource.org/security/网站上找到更多信息。 3.1. Tutorial示例 这个tutorial 示例是带你入门的很好的一个基础例子。它完全使用了简单命名空间配置。 编译好的应用就放在zip 发布包中, 已经准备好发布到你的web 容器中 (spring-security-samples-tutorial-2.0.x.war)。使用了form-based 验证机制,与 常用的remember-me 验证提供器相结合,自动使用cookie 记录登录信息。 我们推荐你从tutorial 例子开始,因为XML 非常小,也很容易看懂。更重要的是,你很 容易就可以把这个XML 文件(和它对应的web.xml 入口)添加到你的程序中。只有做基 本集成成功的时候,我们建议你试着添加方法验证和领域对象安全。 3.2. Contacts Contacts 例子,是一个很高级的例子,它在基本程序安全上附加了领域对象的访问控制列 表,演示了更多强大的功能。 要发布它,先把Spring Security 发布中的war 文件按复制到你的容器的webapps 目录 下。这个war 文件应该叫做spring-security-samples-contacts-2.0.0.war(后边的 版本号,很大程度上依赖于你使用的发布版本)。 在启动你的容器之后, 检测一下程序是不是加载了, 访问 http://localhost:8080/contacts(或是其他你把war 发布后,对应于你web 容器的 URL)。 下一步,点击\。你将看到需要登录的提示,这页上会有一些测试用的用户名和密 码。随便使用其中的一个通过认证,就会看到结果页面。它应该会包含下面这样的一段成 功信息: Security Debug Information Authentication object is of type: org.springframework.security.authentication.UsernamePasswordAuthenticatio nToken Authentication object as a String: org.springframework.security.authentication.UsernamePasswordAuthenticatio nToken@1f127853: Principal: org.springframework.security.core.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.web.authentication.WebAuthenticationDetails@0: \\ RemoteIpAddress: 127.0.0.1; SessionId: 8fkp8t83ohar; \\ 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 文件,搞明白它是如何运行的。 3.3. LDAP例子 LDAP 例子程序提供了一个基础配置,同时使用命名空间配置和使用传统方式bean 的配置 方式,这两种配置方式都写在application context 文件里。这意味着,在这个程序里, 其实是配置了两个定义验证提供器。 3.4. CAS例子 CAS 示例要求你同时运行CAS 服务器和CAS 客户端。它没有包含在发布包里,你应该使 用简介中的介绍来获得源代码。你可以在sample/cas 目录下找到对应的文件。这里还有 一个Readme.txt 文件,解释如何从源代码树中直接运行服务器和客户端,提供完全的SSL 支持。你应该下载CAS 服务器web 程序(一个war 文件)从CAS 网站,把它放到 samples/cas/server 目录下。 3.5. Pre-Authentication例子 这个例子演示了如何从pre-authentication 框架绑定bean,从J2EE 容器中获得有用的登录

