授权是web应用常见的需求,我们需要针对不同的用户,根据他们不同的权限,放行相应的接口。
在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。当前用户是否拥有访问当前资源所需的权限。
因此,在应用spring security的项目中,我们需要将权限信息存入Authentication。
spring security提供了基于注解的权限控制方案,我们需要在spring security配置类中开启。
@EnableGlobalMethodSecurity(prePostEnabled = true)
还记得我们之前所说的要实现UserDetails接口,用于方法返回
在UserDetails接口中定义了getAuthorities方法,spring security会调用这个方法来获取用户权限
java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> getAuthorities();
因此我们实现这个方法
private List<String> permissions;
@JSONField(serialize = false)
private List<GrantedAuthority> authorities;
&