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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是网络掩码,为一个十进制整数(132)

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

下面这个配置将只允许以ADMIN角色在本机访问/admin/下的URL127.0.0.1localhost不相同,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‘)" />

 

以上是关于Spring Security应用开发(16)基于表达式的访问控制的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security - 基于所有权的访问

用于ajax调用的spring security csrf保护

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

是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?

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

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