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

在引导Spring安全过滤器链之前调用过滤器

慕容修伟
2023-03-14

我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零

我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序

@Bean
public FilterRegistrationBean filterRegistrationBean() {

  FilterRegistrationBean registrationBean = new FilterRegistrationBean();

  registrationBean.setFilter(new UrlRewriteFilter());
  registrationBean.addUrlPatterns("*");
  registrationBean.addInitParameter("confReloadCheckInterval", "5");
  registrationBean.addInitParameter("logLevel", "DEBUG");
  registrationBean.addInitParameter("confPath", "urlrewrite.xml");
  registrationBean.setOrder(0);

  return registrationBean;
}

共有3个答案

吴山
2023-03-14

如果您不想为应用程序中的安全过滤器链选择任意顺序。属性文件中,可以使用SecurityProperty设置顺序。默认的FILTER\u顺序值。这是安全过滤器链使用的值,因为它没有显式设置顺序值。

@Bean
public FilterRegistrationBean<MyFilter> myFilterRegistration() {
    FilterRegistrationBean<MyFilter> regBean= new FilterRegistrationBean<>();
    regBean.setFilter(new MyFilter());
    regBean.addUrlPatterns("/*");
    // Invoke MyFilter before the security filter chain
    regBean.setOrder(SecurityProperties.DEFAULT_FILTER_ORDER - 1);

    return regBean;
}
谷弘致
2023-03-14

我发现在SpringBoot 2.0中实现这一点的最好方法是在Spring Security配置中使用addFilterBefore。我选择在用户名密码过滤器之前执行此操作,因为我的过滤器是另一个登录过滤器

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterBefore(new UrlRewriteFilter(), UsernamePasswordAuthenticationFilter.class)
            .authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/*/**").permitAll()
            .antMatchers("/api/login").permitAll()
            .antMatchers("/api/**").access("hasRole('ROLE_ADMIN')");
    }
}
红朝
2023-03-14

应用程序.属性

security.filter-order=5
//>spring 2.1.3
spring.security.filter-order=5

这些属性不时变化,可以在这里找到

https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#actuator-属性

我自己还没有这样做,但是看一下代码,您似乎只需要按照安全过滤器的顺序设置一个属性。例如在application.properties

这应该在安全过滤器之前排序过滤器。我不知道更改这个顺序会带来什么影响,就安全性而言,这对我来说有点风险。Spring开发人员对此进行了讨论。最终他们实现了我上面的答案。

讨论

https://github.com/spring-projects/spring-boot/issues/1640

测试显示此属性的作用。(搜索testCustomFilterorder())

https://github.com/spring-projects/spring-boot/blob/1.2.x/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java

 类似资料:
  • 我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu

  • 我想设置一个推荐人cookie,因为我需要排除一些页面(例如错误、登录、注销等)要在登录后重定向到上次调用但未被排除的页面,请执行以下操作: 但是Spring Security过滤链在CookiierReferrerFilter之前就被触发了。因此,调用安全页面将立即将我重定向到登录页面,而无需调用之前,没有设置cookie。 有一个类配置WebApp(设置配置类、映射、过滤器),它扩展了: 还有

  • 启用Spring Security调试后,它会注册Spring Security DebugFilter.java 我有一个自定义过滤器,我想在spring security DebugFilter之前订购。在调试过滤器之前调用过滤器最合适的方式是什么? 我的自定义过滤器已经是Spring Security过滤器链之前的订单,但它不会在Spring Security调试过滤器之前被调用。

  • 当我调用我的服务时,我的这个URL: 我有这个堆栈跟踪: 什么是平均健康有一个空的筛选器列表?

  • 主要内容:FilterChain 接口,Filter 链的拦截过程,Filter 链中 Filter 的执行顺序,示例在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。 FilterChain 接口 javax.servlet 包中提供了一个 FilterChain 接口,该接口由容器实现。容器将其实例对象

  • 我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但