spring security http intercept-url access配置所有的属性值穷举列表
通常在在使用spring security时,会做如下配置:
<http>
<intercept-url pattern="/login.jsp" access="hasRole('ROLE_ANONYMOUS')" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
很明显access的值表示有什么权限才能访问。那么access有哪些值呢?
Spring Security 提供的 SpEL 方法和伪属性在以下的表格中进行了描述。要注意的是没有被标明“ web only ”的方法和属性可以在保护其他类型的资源中使用,如在保护方法调用时。示例表示的方法和属性是使用在 <intercept-url> 的 access 声明中。
方法 | Web only? | 描述 | 示例 |
hasIpAddress (ipAddress)
| Yes | 用于匹配一个请求的 IP 地址或一个地址的网络掩码 | access="hasIpAddress(' 162.79.8.30')" access="hasIpAddress(' 162.0.0.0/224')"
|
hasRole(role) | No | 用于匹配一个使用 GrantedAuthority 的角色(类似于 RoleVoter ) | access="hasRole('ROLE USER')"
|
hasAnyRole(role) | No | 用于匹配一个使用 GrantedAuthority 的角色列表。用户匹配其中的任何一个均可放行。 | access="hasRole('ROLE_ USER','ROLE_ADMIN')" |
需要注意的是使用has这些SpEL 表达式,要使用use-expressions 配置为true。
<http auto-config="true" use-expressions="true">
当然默认就是true,可以使用表达式语言。
除了以上表格中的方法,在 SpEL 表达式中还有一系列的方法可以作为属性。它们不需要圆括号或方法参数。
方法 | Web only? | 描述 | 示例 |
permitAll | No | 任何用户均可访问 | access="permitAll" |
denyAll | NO | 任何用户均不可访问 | access="denyAll" |
anonymous | NO | 匿名用户可访问 | access="anonymous" |
authenticated | NO | 检查用户是否认证过 | access="authenticated" |
rememberMe | No | 检查用户是否通过 remember me 功能认证的 | access="rememberMe" |
fullyAuthenticated | No | 检查用户是否通过提供完整的凭证信息来认证的 | access="fullyAuthenticated" |