Spring Security应用开发(16)基于表达式的访问控制

1.1.1. 通用表达式

Spring Security 使用基于Spring EL的表达式来进行访问控制。内置的表达式如下表所示:


表达式


描述


hasRole(role)


当前主体(principal)是否支持role角色。支持则返回true


hasAnyRole(role1,role2)


当前主体是否支持role1,role2中的任意一个角色。


hasAuthority(authority)


跟hasRole(role)相似。


hasAnyAuthority(authority1,authority2)


跟hasAnyRole(role1,role2)相似。


principal


取得当前登录的主体,并非boolean


authentication


取得当前认证对象,并非boolean


permitAll


总是返回true


denyAll


总是返回false


isAnonymous()


当前主体是否匿名用户


isRememberMe()


当前主体是否为“记住我”用户,没有完整认证的已认证用户


isAuthenticated()


当前主体是否为非匿名用户


isFullyAuthenticated()


当前主体是否既非匿名用户,也非“记住我”用户


hasPermission(Object target, Object

permission)


当前主体是否对target对象有permission访问权限。


hasPermission(Object targetId,

String targetType, Object

permission)


当前主体是否对标识为targetId,类型为targetType的对象由perssion访问权限。

备注:

1.角色名称默认情况下以ROLE_开头。这个前缀的值由DefaultWebSecurityExpressionHandler.类的defaultRolePrefix属性决定。

2.在hasRole(role)中的role在使用Spring Security4时,可加ROLE_前缀,也可以不加前缀,不加时Spring Security将自动加上ROLE_前缀。hasAuthority(authority)也是类似的处理。

3.在Spring Security4中,hasRole()和hasAuthority()其实是相同的含义。

它们都是SecurityExpressionRoot类中的方法,最终都调用了hasAnyAuthorityName()方法。

1.1.2. WEB表达式

Spring Security4提供了以下WEB专用表达式。


表达式


描述


hasIpAddress(ip/netmask)


客户端地址是否匹配参数中的IP地址和网络掩码

备注:

1.WEB专用表达式在WebSecurityExpressionRoot类中实现。参数中的ip是点分十进制的IP地址字符串,netmask是网络掩码,为一个十进制整数(1到32)。

具体的匹配方式在IpAddressMatcher类中实现。基本思路就是将客户端IP地址和匹配参数中的IP地址都转化为4字节的数组。然后比较网络掩码中二进制位为1的比特位是否相同。完全相同则匹配成功,否则就是不匹配。

下面这个配置将只允许以ADMIN角色在本机访问/admin/下的URL,127.0.0.1和localhost不相同,localhost访问时有可能是IPV6下的地址,而不是127.0.0.1。在此配置中,IP地址以127开头的都是符合条件的IP地址。

<sec:intercept-url pattern="/admin/**" access="hasIpAddress(‘127.0.0.1/24‘) and hasRole(‘ROLE_ADMIN‘)" />
时间: 2024-08-25 00:17:38

Spring Security应用开发(16)基于表达式的访问控制的相关文章

Spring Security应用开发(17)基于方法的授权(一)评估

Spring Security提供了4个用于方法的注解: @PreAuthorize.@PostAuthorize.@PreFilter和@PostFilter.本文介绍前面2个注解. @PreAuthorize 使用Spring Security的表达式来在方法执行之前控制允许执行某个方法. 如果表达式评估结果为false,则该方法不会被执行.@PreAuthorize的表达式通常是对方法的参数进行检查. @PostAuthorize 使用Spring Security的表达式在方法执行之后控

Spring Security应用开发(02)基于XML配置的用户登录

1.1. 基于XML配置的登录功能 经过一系列配置之后,可以使用Spring Security内置功能实现最基本的用户登录功能以及角色验证功能,这种内置的功能没有任何实用价值,仅仅用于了解Spring Security的工作方式. (1)配置web.xml. 主要是为Spring MVC和Spring Security提供一些入口,以便有机会进行Spring MVC以及Spring Security的初始化和过滤处理等工作. <servlet> <servlet-name>spri

Spring Security应用开发(19)基于方法的授权(三)AOP

本文介绍使用AOP的配置方式来实现基于方法的授权. (1)首先使用Spring Security提供的protect-pointcut进行配置. protect-pointcut结点配置访问符合指定条件的方法锁需要的角色列表. <!-- 使用AOP的方式来定义方法级别的访问控制 --> <sec:global-method-security> <sec:protect-pointcut access="ROLE_USER,ROLE_ADMIN" expre

Spring Security应用开发(21)基于方法的授权(五)使用@Secured注解

Spring Security提供了@Secured注解来实现基于方法的授权控制. @Secured注解可以指定一个字符串数组参数作为value的值,表示当前用户具备这些角色中的任何一个角色即可满足授权条件. (1)启用@Secured注解. <sec:global-method-security secured-annotations="enabled" /> (2)使用Secured注解. //getUserByName()方法可以被具备ROLE_ADMIN或者ROLE

Spring Security应用开发(20)基于方法的授权(四)使用@RolesAllowed注解

Spring Security还提供了一种基于注解的方式来实现基于方法的授权.这就是本文介绍的@RolesAllowed注解.@RolesAllowed是JSR250定义的注解. (1)在spring-security.xml文件中启用JSR250注解支持. <!-- 启用JSR250支持:@RolesAllowed注解 --> <sec:global-method-security jsr250-annotations="enabled" /> (2)在需要授

Spring Security应用开发(18)基于方法的授权(二)过滤

本文将介绍@PreFilter和@PostFilter这两个注解. @PreFilter @PreFilter用于对方法的参数进行过滤.这种情况下参数通常是集合类型,符合条件的值被保留在集合中,不符合条件的从集合中移除.如果有多个集合类型的参数,需要使用@PreFilter的一个属性filterTarget来指定要过来的参数的名称. @PostFilter. @PostFilter用于对方法的结果进行过滤.这种情况下返回值通常是集合类型,符合条件的值被保留在集合中,不符合条件的从集合中移除. @

Spring Security OAuth2 开发指南。

官方原文:http://projects.spring.io/spring-security-oauth/docs/oauth2.html 翻译及修改补充:Alex Liao. Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际上分为: 授权服务 Authorization Service. 资源服务 Resource Service. 虽然这两个提供者有时候可能存在同一个应用程序中,但在Spring Security OAuth中你可以把 他它们各自放在

Spring Security应用开发(14) 重要概念之授权相关概念

1.1.1. Secure Object Secure Object指的是一个Method Invovation 或者一个URL资源. 1.1.2. GrantedAuthority GrantedAuthority用于表达指定的用户获得的权限(即角色名称). public interface GrantedAuthority extends Serializable { //返回一个表达已经经过授权的字符串. //如果不符合授权条件则返回null. String getAuthority();

Spring Security(17)——基于方法的权限控制

目录 1.1     intercept-methods定义方法权限控制 1.2     使用pointcut定义方法权限控制 1.3     使用注解定义方法权限控制 1.3.1    JSR-250注解 1.3.2    @Secured注解 1.3.3    支持表达式的注解 1.4     方法权限控制的拦截器 1.4.1    MethodSecurityInterceptor 1.4.2    AspectJMethodSecurityInterceptor 之前介绍的都是基于URL