当前位置:首页 > 开发 > 编程语言 > Spring > 正文

SpringSecurity3.X--SpEL 表达式

发表于: 2014-07-17   作者:hanqunfeng   来源:转载   浏览:
摘要: 使用 Spring 表达式语言配置访问控制,要实现这一功能的直接方式是在<http>配置元素上添加 use-expressions 属性:   <http auto-config="true" use-expressions="true"> 这样就会在投票器中自动增加一个投票器:org.springframework

使用 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"

SpringSecurity3.X--SpEL 表达式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化。但是,匿名方法仍然有些臃
前言 ========================================================================= JSTL标签库,是
Cron表达式时间字段 Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范
遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Langua
OGNL 表达式学习 (文章源自:http://www.iteye.com/topic/646851) <%@ page language="java" im
OGNL(Object Graphic Navagation Language [对象图导航语言]的缩写)。 OGNL一般结合struts2标签一
OGNL(Object Graphic Navagation Language [对象图导航语言]的缩写)。 OGNL一般结合struts2标签一
源自: http://www.cnblogs.com/kingmoon/archive/2011/05/03/2035696.html Lambda表达式 "Lambda表
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号