`
hanqunfeng
  • 浏览: 1541886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringSecurity3.X--SpEL 表达式

 
阅读更多

使用 Spring 表达式语言配置访问控制,要实现这一功能的直接方式是在<http>配置元素上添加 use-expressions 属性:

 

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

这样就会在投票器中自动增加一个投票器:org.springframework.security.web.access.expression.WebExpressionVoter

 

 

但是,如果显示声明了accessDecisionManager,则需要手工加上这个投票器,参考:http://hanqunfeng.iteye.com/blog/1155226

我们以此为基础进行配置:

1.声明WebExpressionVoter

 

<!-- 启用表达式 为了后面的投票器做准备 -->
	<beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" id="expressionHandler"/>
	<beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter" id="expressionVoter">		
		<beans:property name="expressionHandler" ref="expressionHandler"/>	
	</beans:bean>

 2.在accessDecisionManager中增加WebExpressionVoter

 

 

<beans:bean id="accessDecisionManager"
		class="org.springframework.security.access.vote.AffirmativeBased">
		<beans:property name="decisionVoters">
			<beans:list>
				<beans:bean class="org.springframework.security.access.vote.RoleVoter" />
				<beans:bean
					class="org.springframework.security.access.vote.AuthenticatedVoter" />
				<beans:bean class="com.netqin.common.security.DynamicRoleVoter" />
				<beans:ref bean="expressionVoter"/>
			</beans:list>
		</beans:property>
	</beans:bean>

 

 

3.在http标签中增加use-expressions="true"

 

4.修改拦截规则为SpEL表达式

 

<intercept-url pattern="/demo.do*" access="authenticated" />
<intercept-url pattern="/**/*.do*" access="hasRole('HODLE')" />

 

 

ok,以上就配置完成了。

 

SpEL表达式说明

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

access="hasIpAddress('162.79.8.30')"

access="hasIpAddress('162.0.0.0/224')"

 

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

access="hasRole('ROLE_USER')"

 

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

access="hasRole('ROLE_USER','ROLE_ADMIN')"

 

任何用户均可访问  

access="permitAll"

 

任何用户均不可访问  

access="denyAll"

 

匿名用户可访问  

access="anonymous"

 

检查用户是否认证过 

access="authenticated"

 

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

access="rememberMe"

 

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

access="fullyAuthenticated"

 

在 SpEL 中,使用 and,or 以及 not 作为逻辑操作符,例如:

access="hasRole('ROLE_USER') and fullyAuthenticated"

access="rememberMe or fullyAuthenticated"

0
0
分享到:
评论

相关推荐

    spring security 3.x session-management 会话管理失效

    - **基于表达式的访问控制 (ABAC)**:使用SpEL(Spring Expression Language)表达式来定义更复杂的权限规则。 6. **免登陆实现** - Spring Security提供了Remember-Me服务,允许用户在一定时间内无须重新登录。...

    spring-security-4.2.0.RELEASE-dist

    此外,4.2.0版本支持表达式式访问控制,如`@Secured`和`@PreAuthorize`注解,允许开发者使用SpEL(Spring Expression Language)动态设置访问规则。 3. **过滤器链(Filter Chain)**:Spring Security的核心是过滤...

    spring-security-4.0.3.RELEASE-全包

    4. **Expression-Based Access Control (EBAC)**:Spring Security 4.0.3引入了基于表达式的访问控制,允许开发者使用SpEL(Spring Expression Language)来定义访问控制规则,这提供了更灵活的权限控制方式。...

    Spring Security 3.x 官网文档 chm格式 (中文版)

    《Spring Security 3.x 官方文档》是Java开发者学习Spring Security框架的重要参考资料,它以中文版的形式提供了全面且深入的指南。这份文档主要涵盖了Spring Security的核心概念、配置和使用方法,旨在帮助开发者...

    SpringSecurity3.x源码工程

    6. **Expression-Based Access Control (ELAC)**: SpringSecurity支持基于表达式的访问控制,通过SpEL(Spring Expression Language)来定义访问规则,使得授权更加灵活。 7. **Remember Me** 服务:允许用户在关闭...

    spring-security-core-2.0.5.RELEASE.src

    2. **Expression-Based Access Control**(基于表达式的访问控制):Spring Security支持使用SpEL(Spring Expression Language)进行复杂的访问控制表达式定义,这在`org.springframework.security.access....

    最新版spring-framework-4.3.10.RELEASE-dist完整包

    12. **Spring Expression Language (SpEL)**:SpEL是Spring的表达式语言,用于在运行时查询和操作对象图。 13. **事件驱动架构**:Spring支持事件驱动编程模型,允许组件之间通过发布和监听事件进行通信。 14. **...

    实战Spring Security 3.x:快速构建企业级安全.pdf

    《实战Spring Security 3.x:快速构建企业级安全》是一本深入探讨Spring Security框架的实践指南,由知名技术专家罗时飞编著。Spring Security是Java领域中广泛使用的安全框架,它为企业级应用提供了全面的安全解决...

    spring security 3.x第五章例子

    在Spring Security 3.x版本中,这个框架提供了许多改进和新特性,旨在保护基于Spring的应用程序免受安全威胁。第五章通常会深入讲解实际应用中的具体示例,帮助开发者理解如何在项目中集成和配置Spring Security。 ...

    spring-security-project.zip- Spring Security实现RBAC权限模型demo

    7. **权限表达式**:使用Spring Expression Language (SpEL) 来表达更复杂的授权逻辑,如`hasRole()`和`hasPermission()`。 8. **自定义权限增强**:如果需要更细粒度的控制,可以实现自定义的AccessDecisionVoter...

    spring-framework-3.2.17.RELEASE-dist.zip

    SpEL是Spring提供的强大表达式语言,用于在运行时查询和操作对象图。在3.2.17版本中,SpEL增强了对集合操作的支持,可以方便地在表达式中进行条件判断和逻辑运算。 8. **测试支持** Spring Test模块提供了对单元...

    spring-security-3.0.5.RELEASE 官方下载

    7. **Spring Expression Language (SpEL)**:Spring Security 3.0.5.RELEASE可能利用了SpEL进行访问控制表达式的编写,使得动态访问控制成为可能。 8. **异常处理**:框架内置了处理安全相关的异常机制,如未授权...

    springSecurityTest.zip

    这个"springSecurityTest.zip"文件是一个IDEA(IntelliJ IDEA)与MAVEN项目,设计用于帮助初学者理解并入门Spring Security。下面将详细阐述Spring Security的主要概念和其在实际开发中的应用。 首先,Spring ...

    SpringSecurity素材.zip

    4. **表达式式访问控制(Expression-Based Access Control, ECB)**:SpringSecurity允许使用SpEL(Spring Expression Language)进行细粒度的访问控制,例如`@PreAuthorize`和`@PostAuthorize`注解,可以指定方法...

    最新版spring-framework-5.0.0.RELEASE-docs.zip源码

    SpEL是Spring框架中的强大表达式语言,5.0版本提供了更多功能和改进,增强了在运行时查询和操作对象模型的能力。 9. **Spring Security增强**: 对Spring Security的整合也有所提升,提供了更强大的身份验证和...

    spring 4.2.4.RELEASE核心jar包

    6. **Spring-Expression Language (SpEL)**: `spring-expression-4.2.4.RELEASE.jar`是Spring表达式语言,它提供了一个强大的表达式语法来查询和操作对象图。SpEL可以在运行时评估表达式,对对象属性进行动态访问或...

    spring security实现动态授权

    5. **权限表达式**:使用Spring Security的`ExpressionBasedAccessDecisionManager`结合`SpEL (Spring Expression Language)`,可以在URL、方法等安全元数据上定义权限表达式。 6. **配置SecurityConfig**:在...

    Spring3.X企业应用开发实战pdf扫描版+源码光盘

    5. **Spring Expression Language (SpEL)**:Spring3.X引入了SpEL,一种强大的表达式语言,可用于运行时查询和操作对象图。 6. **REST支持**:Spring3.X增强了对RESTful服务的支持,通过`@RequestMapping`等注解,...

    spring-framework-4.1.4.RELEASE-dist

    SpEL是Spring提供的强大表达式语言,4.1.4.RELEASE版本增强了其功能,允许在运行时动态评估表达式,为Bean属性绑定、方法调用等提供便利。 6. **AOP增强** 在4.1.4.RELEASE中,AOP的切面定义更加灵活,支持@...

Global site tag (gtag.js) - Google Analytics