Ho un filtro personalizzato Spring Security che estende GenericFilterBean.Che cosa implica l'aggiunta di @Component al filtro personalizzato Spring Security
Per eseguire la dipendenza automatica e la creazione di bean ho aggiunto un'annotazione @Component.
Nel mio config sicurezza ho registrerà anche il filtro come:
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.addFilterBefore(restAuthenticationFilter, LogoutFilter.class)
Tutto funziona bene, tranne che il mio filtro è chiamato due volte ... Sembra primavera aggiunge filtri automaticamente anche per filtri standard.
Quale dovrebbe essere l'approccio migliore qui?
UPDATE
@ Dave è questo che vuoi dire? Sembra funzionare.
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends WebMvcConfigurerAdapter {
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationSecurity applicationSecurity() {
return new ApplicationSecurity();
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setEnabled(false);
filterRegistrationBean.setFilter(restAuthenticationFilter);
return filterRegistrationBean;
}
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.addFilterBefore(restAuthenticationFilter, LogoutFilter.class)
.authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(new Http403ForbiddenEntryPoint())
.and()
.requestCache()
.requestCache(new NullRequestCache())
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
// @formatter:on
}
}
}
Sì, questo è ciò che intendevo. –
Grazie per la conferma. In qualche modo si sente spiacevole disabilitare esplicitamente il filtro dichiarando FilterRegistrationBean @bean. –
Penso che idealmente l'intento di Filter possa essere dedotto da un'annotazione marcatore ('@ SecurityFilter'?) In congiunzione con' @ Component' - cioè - usami nella catena Security vs. usami nella catena di filtri standard . Mi sono imbattuto in un problema simile me stesso, perché il mio filtro non aveva bisogno di risorse Bean. Non l'ho registrato come '@ Bean', solo un filtro di sicurezza a livello di programmazione. – hoserdude