当前位置: 首页 > 知识库问答 >
问题:

始终调用Spring自定义筛选器

闻人和歌
2023-03-14
.addFilterBefore(preAuthTenantContextInitializerFilter, BasicAuthenticationFilter.class)

下面是过滤器的外观。

@Component
public class PreAuthTenantContextInitializerFilter extends OncePerRequestFilter {
    @Autowired
    private TenantService tenantService;
.....
.....

对于WebSecurityConfigurerAdapter#configure(webSecurityWeb)web.忽略()中包含的路径,我希望该筛选器不会像Spring Security筛选器链的其余部分一样激发。

下面是它的样子

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", 
                                    "/configuration/security", "/swagger-ui.html", 
                                    "/webjars/**","/swagger-resources/configuration/ui",
                                    "/swagge‌​r-ui.html", "/docs/**");
    }
}

我希望在调用Spring Security链的其余部分时调用这个过滤器,并对web.igneration()中的路径忽略这个过滤器,就像Spring Security过滤器的其余部分一样。多谢了。

共有1个答案

郦兴德
2023-03-14

作为Spring bean的任何servletfilterservlet*listener实例都将注册到嵌入式容器中。如果您希望在配置过程中引用application.properties中的值,这会特别方便。

这个片段来自Spring Boot参考指南。基本上,在应用程序上下文中检测到的任何过滤器都将注册到默认过滤器链,并映射到DispatcherServlet/

在您的例子中,当过滤器标记为@component时,它将是一个bean,Spring Boot将检测到is,并将其注册到嵌入式容器中。然而,您并不希望这样做,因为您只希望它是Spring Security过滤器链的一部分。

要这样做,您有两个选项。

  1. 删除@component@autowired并构造您自己的实例,不要使其成为bean。
  2. 添加一个额外的[FilterRegistrationBean]并将Enabled属性设置为False,这将阻止Spring Boot将其注册到嵌入式容器中。

以下是备选方案2的解决方案:

@Bean
public FilterRegistrationBean preAuthTenantContextInitializerFilterRegistration(PreAuthTenantContextInitializerFilter filter) {
    FilterRegistrationBean registration = new FilterRegistrationBean(filter);
    registration.setEnabled(false);
    return registration;
}
 类似资料:
  • 我有一个Spring Boot应用程序,在其中我试图创建一个自定义安全过滤器,如下所示:

  • 我创建了一个自定义筛选器,用于获取令牌,然后用与令牌相关的角色填充身份验证对象 然后,我将该过滤器添加到springsecuritycontext中,如下所示: 应用程序已经存在,我只是尝试添加Spring Security层。Spring Security版本为4.2.3。在尝试实现此功能的几天后,不会加载,因此不会筛选任何请求。请帮帮忙。

  • 我正在尝试将基于Spring MVC xml的项目配置重构为基于Spring Boot java的配置。同时按如下方式设置shiro配置:

  • 存储在Django模型中的元素如下 示例数据如下: . 结果:找到对象- 结果:找到对象- 结果:找到对象- 结果:未找到对象 如何使用过滤器和正则表达式进行这些查询?

  • 我希望每个请求都能收到一些信息,因此我认为与其为每个请求提供一个函数并分别从请求中获取这些信息,不如使用一个过滤器<所以每一个请求都会通过这个过滤器,我就能得到我想要的 问题是:如何编写自定义筛选器 假设它不像任何预定义的Spring Security过滤器,它是全新的。