认证和授权学习3:springsecurity实现方法级的权限控制
本文使用的springboot版本是2.1.3.RELEASE
本文记录下在springsecurity中如何对方法进行权限控制
前边用http.authorizeRequests()
实现了对web资源的保护,如果要实现基于方法的权限控制,springsecurity也提供了两类注解来实现。@PreAuthorize,@Secured
一、@Secured 注解实现方法授权
1.1开启方法授权
在安全配置类上加上注解@EnableGlobalMethodSecurity
开启方法权限控制
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)//开启方法权限控制
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//用户配置
//安全配置
}
1.2 使用@Secured 注解控制方法权限
在需要进行权限控制的方法上加注解,类或接口中都可以
public interface ResourceService {
//这个方法允许匿名访问
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
String res1();
//这个方法要有p1角色才能访问
@Secured("ROLE_P1")
String res2();
//这个方法要有P1或p2角色才能访问
@Secured({"ROLE_P1","ROLE_P2"})
String res3();
}
这样这三个方法就受权限控制了。
二、PreAuthorize 注解控制权限
2.1 开启方法授权
在安全配置类上加注解
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)//开启方法权限控制
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//用户配置
//安全配置
}
2.2 在要控制的方法上使用注解
public interface ResourceService {
//匿名访问
@PreAuthorize("isAnonymous()")
String res4();
//拥有角色1,角色名要带ROLE_前缀
@PreAuthorize("hasRole('ROLE_P1')")
String res5();
}
三、总结
以上示例了在spring security中如何进行方法级的权限控制。分为两步,第一,在配置类上开启方法权限控制
第二步,在对应的方法上加上控制注解指定权限。
完整的示例工程: 示例工程