FilterInvocationSecurityMetadataSource 接口

FilterInvocationSecurityMetadataSource 接口是 Spring Security 中的核心接口之一,用于获取指定请求所需的访问控制元数据,包括访问所需的权限、角色等信息。该接口定义了如下方法:

  1. Collection getAttributes(Object object):根据传入的请求对象,获取该请求所需的访问控制元数据,返回一个 ConfigAttribute 对象的集合。
  2. Collection getAllConfigAttributes():获取系统中所有已定义的访问控制元数据,返回一个 ConfigAttribute 对象的集合。
  3. boolean supports(Class<?> clazz):判断该类是否支持传入的参数类型,如果支持则返回 true,否则返回 false。 FilterInvocationSecurityMetadataSource 接口的实现类负责根据请求 URL ,从数据库或其他外部数据源中获取相应的访问控制元数据,并将其放置到 Spring Security 的全局缓存中供后续使用。常见的实现类包括:
  4. AntPathRequestMatcher:基于 Ant 风格的 URL 匹配器,用于匹配请求的 URL。
  5. DefaultFilterInvocationSecurityMetadataSource:默认的 FilterInvocationSecurityMetadataSource 实现类,用于获取访问控制元数据。
  6. ExpressionBasedFilterInvocationSecurityMetadataSource:基于表达式的 FilterInvocationSecurityMetadataSource 实现类,用于动态获取访问控制元数据。 使用 FilterInvocationSecurityMetadataSource 接口时,我们需要将其注入到 FilterSecurityInterceptor 中,如下所示:
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
     
        @Autowired
        private FilterInvocationSecurityMetadataSource securityMetadataSource;
     
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .anyRequest().authenticated()
                    .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
                        public <O extends FilterSecurityInterceptor> O postProcess(O fsi) {
                            fsi.setSecurityMetadataSource(securityMetadataSource);
                            return fsi;
                        }
                    });
        }
     
        // ...省略其他配置...
    }

    在上面的代码中,我们将 FilterInvocationSecurityMetadataSource 的实现类 securityMetadataSource 注入到 configure() 方法中,并使用 setObjectPostProcessor() 方法将其注册到 FilterSecurityInterceptor 中。这样,当用户发起请求时,Spring Security 将从 securityMetadataSource 中获取该请求所需的访问控制元数据,并根据这些元数据进行访问控制。 总结来说,FilterInvocationSecurityMetadataSource 接口用于获取指定请求所需的访问控制元数据,实现类负责根据请求 URL,从数据库或其他外部数据源中获取相应的访问控制元数据,并将其放置到 Spring Security 的全局缓存中供后续使用。同时,我们需要将其注入到 FilterSecurityInterceptor 中,并使用 setObjectPostProcessor() 方法将其注册到 FilterSecurityInterceptor 中,以实现访问控制功能。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值