前言
在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是 认证+授权。在前面我们分别基于内存模型、基于默认的数据库模型、基于自定义数据库模型实现了认证和授权功能,但是不管哪种方式,我们对某个接口的拦截限制,都是通过编写一个SecurityConfig配置类,在该类的configure(HttpSecurity http)方法中,通过http.authorizeRequests().antMatchers("/admin
@PostFilter("filterObject.id%2==0")
@GetMapping("/users")
public List 我们启动浏览器进行测试,可以看到测试接口中只返回了id为偶数的元素。 使用@PreFilter也可以对集合类型的参数进行过滤,当@PreFilter标注的方法内拥有多个集合类型的参数时,可以通过@PreFilter的filterTarget属性来指定当前是针对哪个参数进行过滤的;而filterObject是@PreFilter中的一个内置表达式,表示集合中的元素对象。 为了方便测试,我们在Service层中进行过滤操作,然后在Controller层中进行调用。 FilterService类中的方法定义: 在Controller中定义一个测试接口: 我们启动浏览器进行测试,可以看到测试接口中只返回id为偶数的元素。 下图是上面案例的代码结构,请参考实现: 我们知道一个标准的RABC, 权限系统需要支持动态配置,Spring Security默认是在代码里约定好权限,真实的业务场景里通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色。而Spring Security中的动态权限,主要是通过重写拦截器和决策器来进行实现,最简单的方法就是自定义一个Filter去完成权限判断。其实这里涉及到的代码,基本和Spring Security关系不大,主要是在传统的Filter进行实现,我这里就不再进行描述了,感兴趣的同学可以自行实现! 至此,我就给各位介绍了Spring Security中的4种进行权限控制的方式,各位可以结合自己的项目需求进行选择。3. @PreFilter的用法
@Slf4j
@Service
public class FilterService {
@PreFilter(filterTarget = "ids", value = "filterObject%2==0")
public List
@Slf4j
@RestController
public class FilterController {
@PostFilter("filterObject.id%2==0")
@GetMapping("/users")
public List
4. 代码结构
五. 利用动态权限实现权限控制



