Bei der Konfiguration von Filter in der Java-Konfiguration ist es zweckmäßig, "org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter" zu erben und die beiden Arten von Konfigurationsmethoden zu überschreiben.
Sie können einen Filter für die Authentifizierung in HttpSecurity hinzufügen und WebSecurity so einstellen, dass der Filter ignoriert wird.
SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final String[] STATIC_RESOURCES = {
"/**/css/**", "/**/js/**", "/**/img/**",
};
@Override
protected void configure(HttpSecurity http) throws Exception {
//Filter zur Sicherheitsfilterkette hinzufügen
http.addFilter(this.preAuthenticatedProcessingFilter());
}
@Override
public void configure(WebSecurity web) throws Exception {
//Legen Sie Pfade fest, die von der Sicherheitsfilterkette ausgeschlossen werden sollen
web.ignoring().antMatchers(STATIC_RESOURCES);
}
//In der Sicherheitsfilterkette registrierte Filter sind nicht Bean-definiert
public AbstractPreAuthenticatedProcessingFilter preAuthenticatedProcessingFilter() throws Exception {
final SampleAuthFilter filter = new SampleAuthFilter();
filter.setAuthenticationManager(this.authenticationManager());
return filter;
}
}
Es gibt viele Artikel und Websites von anderen Leuten hier, also muss ich mich nicht darum kümmern, es zu schreiben, aber ich bin schon eine Weile süchtig danach, also werde ich es schreiben.
Selbst wenn die Ignoriereinstellung festgelegt ist, wird der Filter auf alle Anforderungen angewendet, einschließlich statischer Ressourcen, für die keine Authentifizierung erforderlich ist. Einige Tage lang fand ich etwas Freizeit und suchte nach "Federsicherheit ignoriert nicht funktioniert" usw., konnte jedoch aufgrund von Problemen wie dem Schreiben der Ignoriereinstellungen keine Lösung finden.
Rückblickend war der Kommentar hier in StackOverflow nur die Lösung, aber ich habe es nicht realisiert.
Die Ursache war, dass die Filterklasse mit "@ Component" versehen wurde. Gleiches gilt für das Hinzufügen von "@ Bean" zur Konfigurationsklasse. Infolgedessen wird es außerhalb der Sicherheitsfilterkette registriert.
Die Lösung besteht natürlich darin, sich nicht als Bean zu registrieren.
Einige Seiten haben Beispielcode mit @ Bean
, daher dachte ich, dass einige Leute unter dem gleichen Problem leiden würden.
Obwohl es nicht bestätigt ist, können Sie dieses Problem möglicherweise nicht lösen, wenn Sie Spring Boot (Starter-Web?) Nicht verwenden.
Ich habe einen Hinweis von der Lösung zum Ausschließen von "FilterRegistrationBean" in StackOverFlow erhalten und es geschafft, ihn zu lösen, aber ich kann ihn scheinbar nicht sehen, indem ich ihn nur aus der Quelle von "WebSecurityConfigurerAdapter" zurückverfolge. Funktionsweise von Spring Security in Hello World war sehr hilfreich.
Wenn ich es an einem anderen Tag nicht lösen konnte, flackerte der schlimmste Weg, "eine if-Anweisung auf der Filterseite hinzuzufügen" (lacht).
Spring Security – security none, filters none, access permitAll Spring Security filter chain not ignoring specified path [duplicate] Funktionsweise von Spring Security in Hello World