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

Spring Security系列教程23--Spring Security的四种权限控制方式

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

Spring Security系列教程23--Spring Security的四种权限控制方式

前言

在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是 认证+授权。在前面我们分别基于内存模型、基于默认的数据库模型、基于自定义数据库模型实现了认证和授权功能,但是不管哪种方式,我们对某个接口的拦截限制,都是通过编写一个SecurityConfig配置类,在该类的configure(HttpSecurity http)方法中,通过http.authorizeRequests().antMatchers("/admin @PostFilter("filterObject.id%2==0") @GetMapping("/users") public List getAllUser() { List users = new ArrayList<>(); for (int i = 0; i < 10; i++) { users.add(new User(i, "yyg-" + i)); } return users; } }

我们启动浏览器进行测试,可以看到测试接口中只返回了id为偶数的元素。

3. @PreFilter的用法

使用@PreFilter也可以对集合类型的参数进行过滤,当@PreFilter标注的方法内拥有多个集合类型的参数时,可以通过@PreFilter的filterTarget属性来指定当前是针对哪个参数进行过滤的;而filterObject是@PreFilter中的一个内置表达式,表示集合中的元素对象。

为了方便测试,我们在Service层中进行过滤操作,然后在Controller层中进行调用。

FilterService类中的方法定义:

@Slf4j
@Service
public class FilterService {

    
    @PreFilter(filterTarget = "ids", value = "filterObject%2==0")
    public List doFilter(List ids, List users) {
        log.warn("ids=" + ids.toString());
        log.warn("users=" + users.toString());
        return ids;
    }

}

在Controller中定义一个测试接口:

@Slf4j
@RestController
public class FilterController {

    
    @PostFilter("filterObject.id%2==0")
    @GetMapping("/users")
    public List getAllUser() {
        List users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add(new User(i, "yyg-" + i));
        }
        return users;
    }

    @Autowired
    private FilterService filterService;

    @GetMapping("/users2")
    public List getUserInfos() {
        List ids = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ids.add(i);
        }

        List users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add(new User(i, "yyg-" + i));
        }

        return filterService.doFilter(ids, users);
    }

}

我们启动浏览器进行测试,可以看到测试接口中只返回id为偶数的元素。

4. 代码结构

下图是上面案例的代码结构,请参考实现:

五. 利用动态权限实现权限控制

我们知道一个标准的RABC, 权限系统需要支持动态配置,Spring Security默认是在代码里约定好权限,真实的业务场景里通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色。而Spring Security中的动态权限,主要是通过重写拦截器和决策器来进行实现,最简单的方法就是自定义一个Filter去完成权限判断。其实这里涉及到的代码,基本和Spring Security关系不大,主要是在传统的Filter进行实现,我这里就不再进行描述了,感兴趣的同学可以自行实现!

至此,我就给各位介绍了Spring Security中的4种进行权限控制的方式,各位可以结合自己的项目需求进行选择。

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

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

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