Spring Security 拦截设置

2016-12-13 18:07:50   最后更新: 2016-12-13 18:07:50   访问数量:550




上一篇日志中,我们了解了如何从不同的来源获取用户列表的配置方法

Spring Security 配置用户列表

本篇日志中,我们来介绍一下如何配置拦截不同的请求

 

通过 configure(HttpSecurity) 可以配置如何保护路径

在此前我们已经接触过这个方法:

Spring Secrity 简介及基本配置

@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated() .and().formLogin().and().httpBasic(); }

 

 

HttpSecurity 提供的方法

HttpSecurity 提供的方法
方法作用
access(String)如果给定的SpEL表达式计算结果为true,就允许访问
anonymous()允许匿名用户访问
authenticated()允许认证过的用户访问
denyAll()无条件拒绝所有访问
fullyAuthenticated()如果用户是完整认证的话(不是通过Remember-me功能认证的),就允许访问
hasAnyAuthority(String...)如果用户具备给定权限中的某一个的话,就允许访问
hasAnyRole(String...)如果用户具备给定角色中的某一个的话,就允许访问
hasAuthority(String)如果用户具备给定权限的话,就允许访问
hasIpAddress(String)如果请求来自给定IP地址的话,就允许访问
hasRole(String)如果用户具备给定角色的话,就允许访问
not()对其他访问方法的结果求反
permitAll()无条件允许访问
rememberMe()如果用户是通过Remember-me功能认证的,就允许访问

 

示例

@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/", "/home").permitAll() .antMatchers("/admin/**").access("hasRole('ADMIN')") .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')") .antMatchers("/test/**").permitAll(); }

 

 

access 方法通过传入一个 SpEL 表达式来描述安全规则,如上面例子中的 hasRole 就是其中之一

Spring 提供了下列表达式用来实现安全性控制:

Spring 提供的安全性控制
SpEL 表达式计算结果
authentication用户的认证对象
denyAll结果始终为false
hasAnyRole(list of roles)如果用户被授予了列表中任意的指定角色,结果为true
hasRole(role)如果用户被授予了指定的角色,结果为true
hasIpAddress(IP Address)如果请求来自指定IP的话,结果为true
isAnonymous()如果当前用户为匿名用户,结果为true
isAuthenticated()如果当前用户进行了认证的话,结果为true
isFullyAuthenticated()如果当前用户进行了完整认证的话(不是通过Remember-me功能进行的认证),结果为true
isRememberMe()如果当前用户是通过Remember-me自动认证的,结果为true
permitAll结果始终为true
principal用户的principal对象

 

除了上面示例中的 hasRole 方法用来限制用户的权限,还可以对用户的 IP 等进行限制

 






技术帖      mvc      龙潭书斋      http      java      spring      springmvc      configure      security      拦截     


京ICP备15018585号