`

spring security原理图及其解释(五)

 
阅读更多
Access configuration using spring expression language

An alternative method to the standard role-based voting mechanism implemented by RoleVoter is the use of Spring Expression Language (SpEL) expressions to define arbitrarily complex rules for voting. The straightforward way to implement this feature is to add the use-expressions attribute to the <http> configuration element:

对于实现了标准role-based投票机制的RoleVoter,它可以选择使用Spring Expression Language表达式来表达任意的复杂投票规则。最直接实现这个特性的方法是在<http>中添加use-expressions元素。

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

This addition will modify the behavior of the access attribute on the URL intercept rule declarations to expect an SpEL expression. SpEL expressions allow for the use of expression language specifications of access criteria. Instead of simple strings such as ROLE_USER, the configuration file can specify expressions that invoke method calls, reference system properties, compute values, and much more.

An important point to note is that if you enable the SpEL expression-based access specifications by setting the use-expressions attribute, you will disable the automatic configuration of the RoleVoter, which understands declarations of roles, like we saw in our simple configuration:

重要的一点是如果你使用了SpEL表达式,那么自动的RoleVoter配置就会被废弃,比如了解roles的声明等,就下下面这样:(就是如果这么声明了,那么程序就看不懂下面的代码了)

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

This means that your access declarations must change if you want to filter access solely by role. Fortunately, this was anticipated, and an SpEL-bound method hasRole is available to check roles. If we rewrote our sample configuration file to use expressions, it would look like this:

它的意思就是如果你想继续使用就必须修改声明。幸运的是,和期望的一样SpEL-bound方法hasRole是可以使用的。如果我们重写上面的例子,那么我们可以像下面的声明一样:
<http auto-config="true" use-expressions="true">
     <intercept-url pattern="/*" access="hasRole('ROLE_USER')"/>
</http>


As you might expect, the SpEL handling is supplied by a different Voter implementation, o.s.s.web.access.expression.WebExpressionVoter, which understands how to evaluate the SpEL expressions. The WebExpressionVoter relies on an implementation of the o.s.s.web.access.expression.WebSecurityExpressionHandler interface for this purpose. The WebSecurityExpressionHandler is responsible both for evaluating the expressions, as well as supplying the security-specific methods that are referenced in the expressions. The default implementation of this interface exposes methods defined in the o.s.s.web.access.expression.WebSecurityExpressionRoot class.

正像你猜测的一样,SpEl处理的支持是由另一个Voter实现的——o.s.s.web.access.expression.WebExpressionVoter,它知道如何解析SpEl表达式。 WebExpressionVoter依赖于实现WebSecurityExpressionHandler接口。WebSecurityExpressionHandler负责解析表达式和提供表达式引用的security-specific方法。这个接口的默认的实现是由WebSecurityExpressionRoot提供的。

The flow and relationship between these classes is shown in the following diagram:


Methods and pseudo-properties for SpEL access expressions are declared by the public methods provided by the WebSecurityExpessionRoot class, and its superclasses.

The available SpEL methods and pseudo-properties which ship with Spring Security 3 are shown in the following tables. Note that methods and properties not marked as "web only" are available for use when securing other types of resources that utilize SpEL, such as method calls. The examples provided illustrate the use of the method or property in an <intercept-url> access declaration.




In addition to the methods in the previous table, a series of methods are provided that can act as properties in the SpEL expressions. These do not require parentheses or method arguments.






Remember that voter implementations must return a voting decision (grant, deny, or abstain) based on the context of the request. You may note that hasRole sounds like it returns a Boolean response, and in fact this is true. SpEL-based access declarations must consist only of expressions which return a Boolean result. A true result means that the voter grants access, and a false result means that the voter denies access.

If you try to return an expression that doesn't evaluate to a Boolean, you'll
get an unfriendly exception with a message like this:

org.springframework.expression.spel.SpelException: EL1001E:Type conversion problem, cannot convert from class java.lang.Integer to java.lang.Boolean
  • 大小: 39.5 KB
  • 大小: 65 KB
  • 大小: 28.7 KB
  • 大小: 37.5 KB
分享到:
评论

相关推荐

    springsecurity原理流程图.pdf

    Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...

    SpringSecurity基本原理图

    对Security基本执行过程的分析和各个环节类执行的分析。

    SpringSecurity笔记,编程不良人笔记

    可能是使用Draw.io绘制的SpringSecurity架构图或流程图,帮助可视化理解SpringSecurity的工作原理。 总之,SpringSecurity为开发者提供了强大的安全工具,通过灵活的配置和丰富的扩展性,能够满足各种复杂的Web...

    springsecurity前端素材.zip

    在本“springsecurity前端素材”中,我们有两个主要的文件夹:templates和static,它们分别代表了前端展示层的不同方面。 **templates** 文件夹通常包含了应用的HTML模板文件,这些文件被用于构建用户界面。在...

    Spring security

    其实这些都不是问题,为了帮助学生理清思路把抽象的东西变的更加具体,我用Freemind 画了一幅Spring Security的一个整体概况图,从大的方向列出了配置一个Spring Security需要的一些东西,包括如何配置,配置文件中...

    基于SpringSecurity的图书借阅系统源代码

    《基于SpringSecurity的图书借阅系统源代码》是一款利用SpringSecurity框架实现的图书管理与借阅功能的应用系统。SpringSecurity是Java领域内广泛使用的安全框架,它为应用程序提供了全面的安全控制,包括认证、授权...

    SpringSecurity框架原理.png

    该图是作者在分析SpringSecurity框架源代码之后梳理出来的Spring Security框架得启动原理图,即SpringSecurity是如何获取过滤器参数配置并调用相应的过滤器的;

    Spring Security实现验证码登录功能

    知识点一:Spring Security验证码登录功能的实现原理 Spring Security的验证码登录功能是基于Java的图形验证码技术实现的。该技术生成一个随机的验证码图片,用户需要输入正确的验证码以完成登录。这样可以防止...

    springsecurity整合cas全程

    1. **开场简单介绍**:简要介绍 Spring Security 的核心组件及其工作原理。 2. **配置 CAS Filter**:Spring Security 需要配置 CAS Filter 来处理与 CASServer 的通信。主要步骤包括: - **引入 CAS Filter**:在...

    spring security 2 学习,是2 不是3

    - 通过阅读源码,我们可以深入理解Spring Security的工作原理,了解它是如何处理请求、认证和授权的,这对于定制和扩展框架非常有帮助。 8. **工具支持** - IDE插件:如Spring Tool Suite (STS) 可以提供对Spring...

    Spring Security整合Oauth2实现流程详解

    Spring Security 是一个强大的安全框架,它为Java应用程序提供了全面的安全管理解决方案。而OAuth2则是一种开放标准,用于授权第三方应用访问用户的数据。在前后端分离的架构中,OAuth2常常用于处理用户登录验证,...

    SpringBoot + SpringSecurity 短信验证码登录功能实现

    SpringBoot + SpringSecurity 短信验证码登录功能实现 本文主要介绍了 SpringBoot + SpringSecurity 短信验证码登录功能实现的详细过程,该功能可以使用户通过手机短信验证码登录系统,而不是传统的用户名密码登录...

    基于Acticiti7的Web工作流引擎,使用BPMN-JS绘制业务流程 集成SpringSecurity安全框架

    综上所述,这个项目结合了Acticiti7的工作流能力、BPMN-JS的流程建模可视化及SpringSecurity的安全保障,构建了一个功能齐全且易于维护的Web工作流管理系统。通过深入理解Acticiti7的工作原理、BPMN-JS的绘图机制...

    Spring Web Flow 2简化页面流的开发,结合Spring MVC更俊,Spirng Security 3添加安全机制

    理解Spring Web Flow 2的源码可以帮助开发者深入理解其工作原理,从而更好地设计和实现复杂的页面流程。源码中包含了各种核心组件,如FlowExecutor、StateMachine以及Action和Transition的实现。通过阅读源码,我们...

    Spring 揭秘 全面 深入了解Spring

    在事务管理方面,Spring提供了编程式和声明式两种事务管理方式,书中有详细的解释和示例,帮助读者理解何时及如何选择合适的方式。 安全是任何应用都需要考虑的问题,Spring Security提供了一套全面的安全解决方案...

    图书:Spring 安全3

    《Spring 安全3》是一本深入探讨Spring Security框架的专业图书,主要针对Java开发者和对安全领域感兴趣的IT人士。Spring Security是Spring生态系统中的一个核心组件,它为Java应用程序提供了全面的安全管理解决方案...

    JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架

    本篇文章将详细讲解基于Spring、SpringMVC、MyBatis、SpringSecurity、EhCache和JCaptcha这六大组件构建的Web框架。 1. **Spring**: Spring作为整个框架的核心,提供了依赖注入(DI)和面向切面编程(AOP)等特性...

    学习Spring的图片截图

    Spring框架是中国乃至全球...结合图片截图,可以更直观地理解Spring的组件和工作原理,有助于快速掌握和应用Spring框架。同时,持续关注Spring的更新日志,可以确保我们的技能与时俱进,适应不断变化的软件开发环境。

    Spring技术内幕:深入解析Spring架构与设计原理(第2版)

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是一本专注于Spring框架的高级参考书籍,面向对Spring有深入了解需求的Java开发者。书中不仅介绍了Spring框架的基本概念和原理,更深入到Spring框架内部,...

Global site tag (gtag.js) - Google Analytics