Ich habe einen benutzerdefinierten Spring Security Filter, der GenericFilterBean erweitert.Was bedeutet das Hinzufügen von @Component zum benutzerdefinierten Spring Security Filter?
Um automatische Abhängigkeit und Bean-Erstellung zu tun, habe ich eine @ Komponent Annotation hinzugefügt.
In meinem Security Config ich registriere auch die Filter wie:
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.addFilterBefore(restAuthenticationFilter, LogoutFilter.class)
Alles funktioniert gut, außer dass mein Filter genannt werden zweimal ... Es scheint Frühling Filter auch automatisch auf Standardfilter ergänzt.
Was sollte hier der beste Ansatz sein?
UPDATE
@ Dave ist es das, was Sie meinen? Es scheint zu funktionieren.
@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
}
}
}
Ja, das habe ich gemeint. –
Danke für die Bestätigung. Es ist irgendwie unangenehm, den Filter explizit zu deaktivieren, indem man eine FilterRegistrationBean @bean deklariert. –
Ich denke, idealerweise könnte eine Filterabsicht aus einer Marker-Annotation ('@ SecurityFilter'?) In Verbindung mit der' @ Component' abgeleitet werden - dh - benutze mich in der Sicherheitskette oder benutze mich in der Standardfilterkette . Ich stieß selbst auf ein ähnliches Problem, weil mein Filter keine Bean-Ressourcen brauchte. Ich habe es nicht als '@ Bean' registriert, sondern nur einen Sicherheitsfilter programmgesteuert. – hoserdude