相关文章推荐
个性的小马驹  ·  Java ...·  4 月前    · 
追风的啤酒  ·  Protocol support for ...·  1 年前    · 
空虚的枕头  ·  c++ - Nlohmann json ...·  1 年前    · 

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 {
                .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 中,以实现访问控制功能。

这样,当用户发起请求时,Spring Security 将从 securityMetadataSource 中获取该请求所需的访问控制元数据,并根据这些元数据进行访问控制。总结来说,FilterInvocationSecurityMetadataSource 接口用于获取指定请求所需的访问控制元数据,实现类负责根据请求 URL,从数据库或其他外部数据源中获取相应的访问控制元数据,并将其放置到 Spring Security 的全局缓存中供后续使用。
public class My Invo cat ion Security Metadata Source Service implements Filter Invo cat ion Security Metadata Source { @Autowired private IRe source Dao re source Dao; //&lt;资源,权限列表&gt;存储所有资源与权限 private stati...
6.1 授权认证 之前学了身份认证,就是认证当前登录的用户是否是存在并真实的,身份认证成功后就可以访问认证后的 接口 (资源)了,但即便是已认证的用户也有能访问不能访问的 接口 (资源),那么就需要通过授权认证来判断。 今天学习授权认证,也就是认证当前登录用户都有哪些权限,并确定当前用户的权限是否能访问当前请求的 接口 。 之前在 spring security ——学习笔记(day03)-UserDetailsSe...
Spring Security 中实现通过数据库动态配置url资源权限,需要通过配置验证过滤器来实现资源权限的加载、验证。系统启动时,到数据库加载系统资源权限列表,当有请求访问时,通过对比系统资源权限列表和用户资源权限列表(在用户登录时添加到用户信息中)来判断用户是否有该url的访问权限。   在配置验证过滤器时需要的配置项有如下几个: filter Security Interceptor:通过继承Abstract Security Interceptor并实现 Filter 接口 自定义一个验证过滤...
@Component public class Custom Filter Invo cat ion Security Metadata Source implements Filter Invo cat ion Security Metadata Source { private fi Security Metadata Source Spring Security 的一个概念模型 接口 。用于表示对受权限保护的"安全对象"的权限设置信息。一个该类对象可以被理解成一个映射表,映射表中的每一项包含如下信息 : * 安全对象 * 安全对象所需权限信息 围绕该映射表, Security Metadata Source 定义了如下方法 : Collect ion <ConfigAttri...
关于每次请求都要执行两个,即经过重写 Filter Invo cat ion Security Metadata Source 的getAttributes()方法 执行两次的方法 @Override public Collect ion <ConfigAttribute> getAttributes(Object object) throws IllegalArgumentExcept ion { //获取请求地址 String requestUrl = (( Filter I
使用自定义 Filter 方式实现的,实现了 Filter Invo cat ion Security Metadata Source AccessDecis ion Manager 接口 ,用户权限直接写在代码里,自己可以修改,配置到数据库中。 jar包自己配置
虽然前面我们实现了通过数据库来配置用户与角色,但认证规则仍然是使用Http Security 进行配置,还是不够灵活,无法实现资源和角色之间的动态调整。这篇文章我们就介绍一下通过数据库查询某个URL资源的访问角色。 四、基于数据库的URL权限规则配置 1、数据库设计 这里在上一篇文章的基础上再添加 资源表和资源权限表 两种数据表,表结构如下所示: 资源表,保存每个菜单的URL CREATE TABLE `menus` ( `id` bigint(20) unsigned NOT NULL ...
一、实现 Filter Invo cat ion Security Metadata Source 读资源对应的权限,先进行一下筛选 //元数据,根据请求的资源到资源表去找合适的角色 @Service public class Wgc Security Metadata Source implements Filter Invo cat ion Security Metadata Source { @Autowi...
使用Http Security 配置认证授权并不是很灵活,无法实现资源和角色之间的动态调整,要实现动态配置URL权限, 开发 者需要自定义权限配置。(结合总结三实现) 1.数据库设计   在总结三的基础上新增一张资源表和一张角色关联表,如下图所示,资源表中定义了用户能够访问的URL模式,资源角色表定义了访问该模式的URL需要什么样的角色。 2.自定义 Filter Invo cat ion Security Metadata Source 要实现动态配置权限,首先自定义一个类实现 Filter Invo cat ion S
用户名密码认证、短信验证码认证、踢人下线、 Authorizat ion Filter 授权、 Filter Security Interceptor url / express ion 授权、登出、分布式配置。 2、 Security Config   先添加一个 Security Config 配置类,作为整个 spring security 的核心配置,后续的认证、授权等功能都将在整个配置类中完成。 3、用户名密码认证   用户名密码认证主要是自定义实现 UserDetails、UserDetailsService、A