我正在使用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)时,是否有一种方法可以控制调用顺序?确切地说,所需顺序为:
谢谢
不FilterChainProxy使用Spring Security Ordered(如果可以,则可以订购所有过滤器)。但是,你应该能够在注册它FilterRegistrationBean这 是 Ordered和注册其他过滤器相同的方式。对于安全过滤器,您可以按名称将其注入到注册bean中。您可能可以通过调用@Bean方法注入的其他对象。
FilterChainProxy
Ordered
FilterRegistrationBean
@Bean