栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【项目实训】Spring Security授权

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【项目实训】Spring Security授权

授权是web应用常见的需求,我们需要针对不同的用户,根据他们不同的权限,放行相应的接口。

在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。当前用户是否拥有访问当前资源所需的权限。

因此,在应用spring security的项目中,我们需要将权限信息存入Authentication。

spring security提供了基于注解的权限控制方案,我们需要在spring security配置类中开启。

@EnableGlobalMethodSecurity(prePostEnabled = true)

还记得我们之前所说的要实现UserDetails接口,用于方法返回

在UserDetails接口中定义了getAuthorities方法,spring security会调用这个方法来获取用户权限

    java.util.Collection getAuthorities();

因此我们实现这个方法

    private List permissions;

    @JSONField(serialize = false)
    private List authorities;
    
    @Override
    public  Collection getAuthorities() {
        if(authorities!=null){
            return authorities;
        }
        authorities = permissions.stream().
                map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
        return authorities;
    }
 

该方法要求的返回类型是Collection泛型,泛型下界是GrantedAuthority

基于对序列化的一些考量,我们定义List用于存权限信息,而调用该方法时则将其转为SimpleGrantedAuthority

UserDetails的实现类处理好后,我们在登录逻辑中就可以把从数据库中获取的权限信息封装到该对象中,spring security在授权时就会去相应获取权限信息。

进而,我们就可以使用spring security的注解去限制资源的访问,如@PreAuthorize("hasAuthority('test')")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号