`
lengyun3566
  • 浏览: 455171 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
D59180b9-02f1-3380-840c-ea34da46143c
《Spring Secur...
浏览量:385290
社区版块
存档分类
最新评论

《Spring Security3》第二章第三部分翻译(下)附前两章doc文档

阅读更多

关注这个系列的同学们有福了,我把前两章翻译的doc文档上传了,欢迎传播。有谬误之处,请不吝指正。

 

 

使用 Spring 表达式语言配置访问控制

基于角色标准投票机制的标准实现是使用 RoleVoter ,还有一种替代方法可用来定义语法复杂的投票规则即使用 Spring 表达式语言( SpEL )。要实现这一功能的直接方式是在 <http> 配置元素上添加 use-expressions 属性:

 

<http auto-config="true"

      use-expressions="true">

添加后将要修改用来进行拦截器规则声明的 access 属性,改为 SpEL 表达式。 SpEL 允许使用特定的访问控制规则表达式语言。与简单的字符串如 ROLE_USER 不同,配置文件可以指明表达式语言触发方法调用、引用系统属性、计算机值等等。

SpEL 的语法与其他的表达式语言很类似,如在 Tapestry 等框架中用到的 Object Graph Notation Language (OGNL) ,以及用于 JSP JSF Unified Expression Language 。它的语法面很广,已经超出了本书的覆盖范围,我们将会通过几个例子为你构建表达式提供一些确切的帮助。

需要注意的重要一点是,如果你通过使用 use-expressions 属性启用了 SpEL 表达式访问控制,将会使得自动配置的 RoleVoter 实效,后者能够使用角色的声明,正如在前面的例子所见到的那样:

 

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

这意味着如果你仅仅想通过角色来过滤请求的话,访问控制声明必要要进行修改。幸运的的是,这已经被充分考虑过了,一个 SpEL 绑定的方法 hasRole 能够检查角色。如果我们要使用表达式来重写例子的配置,它可能看起来如下所示:

 

<http auto-config="true" use-expressions="true">

  <intercept-url pattern="/*" access="hasRole('ROLE_USER')"/>

</http>

正如你可能预料的那样, SpEL 使用了一个不同的 Voter 实现类,即 o.s.s.web.access.expression.WebExpressionVoter ,它能理解怎样解析 SpEL 表达式。 WebExpressionVoter 借助于 o.s.s.web.access.expression.WebSecurityExpressionHandler 接口的一个实现类来达到这个目的。 WebSecurityExpressionHandler 同时负责评估表达式的执行结果以及提供在表达式中应用的安全相关的方法。这个接口的默认实现对外暴露了 o.s.s.web.access.expression.WebSecurityExpressionRoot 类中定义的方法。

这些类的流程以及关系如下图所示:



 为实现 SpEL 访问控制表达式的方法和伪属性( pseudo-property )在类 WebSecurityExpessionRoot 及其父类的公共方法中进行了声明。

【伪属性( pseudo-property )是指没有传入参数并符合 JavaBeans getters 命名格式的方法。这允许 SpEL 表达式能够省略方法的圆括号以及 is get 的前缀。如 isAnonymous() 方法可以通过 anonymous 伪属性来访问。】

Spring Security 3 提供的 SpEL 方法和伪属性在以下的表格中进行了描述。要注意的是没有被标明“ web only ”的方法和属性可以在保护其他类型的资源中使用,如在保护方法调用时。示例表示的方法和属性是使用在 <intercept-url> access 声明中。

方法

Web only?

描述

示例

hasIpAddress

(ipAddress)

Yes

用于匹配一个请求的 IP 地址或一个地址的网络掩码

access="hasIpAddress('

162.79.8.30')"

access="hasIpAddress('

162.0.0.0/224')"

hasRole(role)

No

用于匹配一个使用 GrantedAuthority 的角色(类似于 RoleVoter

access="hasRole('ROLE

USER')"

hasAnyRole(role)

No

用于匹配一个使用 GrantedAuthority 的角色列表。用户匹配其中的任何一个均可放行。

access="hasRole('ROLE_

USER','ROLE_ADMIN')"

除了以上表格中的方法,在 SpEL 表达式中还有一系列的方法可以作为属性。它们不需要圆括号或方法参数。

属性

Web only?

描述

例子

permitAll

No

任何用户均可访问

access="permitAll"

denyAll

NO

任何用户均不可访问

access="denyAll"

anonymous

NO

匿名用户可访问

access="anonymous"

authenticated

NO

检查用户是否认证过

access="authenticated"

rememberMe

No

检查用户是否通过 remember me 功能认证的

access="rememberMe"

fullyAuthenticated

No

检查用户是否通过提供完整的凭证信息来认证的

access="fullyAuthenticated"

需要记住的是, voter 的实现类必须基于请求的上下文返回一个投票的结果(允许、拒绝或者弃权)。你可能会认为 hasRole 会返回一个 Boolean 值,实际上正是如此。基于 SpEL 的访问控制声明必须是返回 Boolean 类型的表达式。返回值为 true 意味着投票器的结果是允许访问, false 的结果意味着投票器拒绝访问。

【如果一个表达式的值不是 Boolean 类型的,你将会得到如下的一个异常信息: org.springframework.expression.spel.SpelException:

EL1001E:Type conversion problem, cannot convert from

class java.lang.Integer to java.lang.Boolean

另外,表达式不能返回一个弃权类型的结果,除非访问控制声明不是一个合法 SpEL 表达式,在这种情况下投票器将会放弃投票。

如果你不在乎这些细小的约束, SpEL 访问控制声明能够提供一种灵活的配置访问控制决策的方式。

 

在本章中,我们提供了安全领域两个重要概念即认证和授权的介绍。

 

l 在总体上了解我们要进行安全保护的系统;

l 使用 Spring Security 的自动配置在三步之内实现了我们应用的安全配置;

l 了解了在 Spring Security servlet 过滤器的使用及重要性;

l 了解了认证和授权过程中重要的角色,包括一些重要类实现的详细介绍如 Authentication UserDetails

l 体验了与访问控制规则有关的 SpEL 表达式的配置。

在接下来的一章中,我们将通过添加一些增强用户体验的功能,把基于用户名和密码的认证提高一个新的水平。

 

 

 

  • 大小: 47.9 KB
6
0
分享到:
评论
3 楼 stevensinclair 2011-06-25  
后面两句拷贝多了?
2 楼 stevensinclair 2011-06-25  
我还是等我的书从英国寄过来吧 等你全翻译完了 整个PDF的 我对比看看 做校验
1 楼 lengyun3566 2011-06-25  
网速不给力啊,附件咋传不上呢

相关推荐

    Spring Security3中文文档

    该章节分为两个部分,介绍了Spring Security3的基础概念,包括如何设置安全上下文、理解Spring Security的架构以及如何使用Spring Security进行基本的认证和授权。 ### 第二章:深入理解Spring Security3 本章深入...

    spring security 官方文档

    例如,5.1版本的新特性包括对Servlet和WebFlux的支持增强,以及与其他第三方库的集成改进。开发者可以通过阅读文档来了解如何在项目中充分利用这些新功能。 总之,Spring Security是Java开发者在构建安全应用程序时...

    spring-security 官方文档 中文版

    ### Spring Security 官方文档中文版重要知识点解析 #### 一、Spring Security 概述 **1.1 Spring Security 是什么?** Spring Security 是一款基于 Spring 框架的安全插件,提供了完整的安全性解决方案,包括...

    Spring Security-3中文官方文档(及教程)

    Spring Security 3是中国社区翻译的官方文档,为国内开发者提供了方便的学习资源。 本套文档包含了Spring Security的基础概念、配置、核心组件以及实际应用场景的详细讲解。以下是一些关键知识点的概述: 1. **...

    springSecurity3中文文档

    第三章:增强用户体验 第四章:凭证安全存储 第五章:精确的访问控制 第六章:高级配置和扩展 第七章:访问控制列表(ACL) 第八章:对OpenID开放 第九章:LDAP目录服务 第十章:使用中心认证服务 第十一章:客户端...

    《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)附前四章doc文件

    《Spring Security3》第四章第四部分主要探讨了Remember me服务的后台存储机制以及如何结合SSL(Secure Sockets Layer)来增强应用的安全性。这一部分的知识点涵盖了Spring Security中Remember me的功能,用户身份...

    Spring Security3 中文开发文档

    Spring Security3 中文开发文档

    SpringSecurity中文文档.zip

    本压缩包包含了两份重要的SpringSecurity中文文档,分别为“Spring Security安全权限管理手册.CHM”和“Spring Security 3.x Reference__Robin收集整理制作(fastzch@gmail.com).chm”。 “Spring Security安全权限...

    Spring Security 3 源码分析文档

    通过阅读《Spring Security3.pdf》和《spring security3 源码分析.pdf》这两份文档,你可以对Spring Security 3的内部工作机制有更深入的理解,从而更好地在项目中运用这个强大的安全框架。同时,这也会帮助你在面临...

    SpringSecurity.pdf

    Spring Security的学习过程可以分为入门、进阶和高级三个阶段。入门阶段主要是了解Spring Security的基本概念和配置方法。进阶阶段需要深入学习如何定制认证和授权流程、如何集成各种认证方式以及如何在实际项目中...

    Spring Security API(Spring Security 开发文档).CHM

    Spring Security。 官网 Spring Security API(Spring Security 开发文档).CHM

    SpringSecurity课程文档下载 pdf 教学

    SpringSecurity课程文档下载 pdf 教学

    spring参考文档及SpringSecurity参考文档

    3. **CSRF(跨站请求伪造)防护**:防止恶意第三方模拟用户发送请求。 4. **会话管理**:包括会话固定保护、会话超时检测等功能,增强了系统的安全性。 5. **Remember Me服务**:允许用户在一段时间内免登录访问系统...

    spring-security-oauth2-2.3.5.RELEASE-API文档-中文版.zip

    包含翻译后的API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security.oauth:spring-security-oauth2:2.3.5.RELEASE; 标签:spring、security...

    Spring Security 3.x中文文档

    Spring Security是Java领域中一款广泛使用的安全框架,用于...这份中文文档详细介绍了这些概念和配置,是开发者深入学习Spring Security 3.x的强大资源。通过深入阅读和实践,开发者能够构建出坚固且灵活的安全系统。

    Spring Security 5.1 中文 参考手册 中文文档

    Spring Security 5.1 中文 参考手册 中文文档 中文文档都是由软件翻译,翻译内容未检查校对,文档内容仅供参考。

    spring-security-core-5.0.7.RELEASE-API文档-中文版.zip

    包含翻译后的API文档:spring-security-core-5.0.7.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-core:5.0.7.RELEASE; 标签:springframework、security...

    spring-security-crypto-5.5.2-API文档-中文版.zip

    包含翻译后的API文档:spring-security-crypto-5.5.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-crypto:5.5.2; 标签:springframework、security、spring、...

    springsecurity官方文档3.2

    ### Spring Security 官方文档3.2 知识点概览 #### 1. Spring Security 简介 - **Spring Security** 是一个强大的、高度可定制的身份验证和访问控制框架。 - **历史**: 本章节简要回顾了 Spring Security 的发展...

Global site tag (gtag.js) - Google Analytics