一尘不染

在Servlet 3+环境中在spring-security过滤器之后添加要调用的自定义过滤器

spring-boot

我正在使用Spring-Security 3.2.4和Spring Boot
1.1.0(及其相关的依赖版本4.X)。我正在编写一个将在嵌入式tomcat中运行的Web应用程序。

我正在尝试添加两个其他过滤器(与Spring安全性无关),其中一个将在Spring-Security-
FilterChainProxy之前被调用,另一个将在Spring-Security-FilterChainProxy之后被调用。

我的Spring-Security配置文件:

@Configuration
@EnableWebMvcSecurity
public class SecurityCtxConfig extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
    .inMemoryAuthentication()
        .withUser("user").password("pass").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf()
            .disable()
            .authorizeRequests()
            .anyRequest()
            .authenticated()
            .and()
            .formLogin()
            .usernameParameter("user").passwordParameter("password");
}
}

和主类(Application.class):

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    @Bean
RequestFilter beforeSpringSecurityFilter(){
    return new RequestFilter();
}

@Bean
RequestFilter afterSpringSecurityFilter(){
    return new RequestFilter();
}

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

和Filter实现:

public class RequestFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
        FilterChain filterChain) throws ServletException, IOException {
        filterChain.doFilter(request, response);
}

}

考虑到FilterChainProxy(即由WebSecurityConfigurerAdapter创建的beeing)时,是否有一种方法可以控制调用顺序?确切地说,所需顺序为:

  1. 请求过滤器1
  2. 弹簧安全过滤链
  3. 请求过滤器2

谢谢


阅读 548

收藏
2020-05-30

共1个答案

一尘不染

FilterChainProxy使用Spring Security
Ordered(如果可以,则可以订购所有过滤器)。但是,你应该能够在注册它FilterRegistrationBean
Ordered和注册其他过滤器相同的方式。对于安全过滤器,您可以按名称将其注入到注册bean中。您可能可以通过调用@Bean方法注入的其他对象。

2020-05-30