Lors de la configuration du filtre dans la configuration Java, il est pratique d'hériter de ʻorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter` et de remplacer les deux méthodes de configuration.
Vous pouvez ajouter un filtre pour l'authentification dans HttpSecurity et configurer WebSecurity pour ignorer le filtre.
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 {
//Ajouter un filtre à la chaîne de filtres de sécurité
http.addFilter(this.preAuthenticatedProcessingFilter());
}
@Override
public void configure(WebSecurity web) throws Exception {
//Définir les chemins à exclure de la chaîne de filtres de sécurité
web.ignoring().antMatchers(STATIC_RESOURCES);
}
//Les filtres enregistrés dans la chaîne de filtres de sécurité ne sont pas définis par bean
public AbstractPreAuthenticatedProcessingFilter preAuthenticatedProcessingFilter() throws Exception {
final SampleAuthFilter filter = new SampleAuthFilter();
filter.setAuthenticationManager(this.authenticationManager());
return filter;
}
}
Il y a beaucoup d'articles et de sites d'autres personnes ici, donc je n'ai pas à me soucier de l'écrire, mais j'y suis accro depuis un moment, alors je vais l'écrire.
Même si le paramètre Ignorer est défini, le filtre sera appliqué à toutes les demandes, y compris les ressources statiques qui ne nécessitent pas d'authentification. Pendant quelques jours, j'ai trouvé du temps libre et j'ai recherché «la sécurité du ressort ignorant ne fonctionne pas», etc., mais je n'ai pas trouvé de solution en raison de problèmes tels que la façon d'écrire les paramètres d'ignorer.
Rétrospectivement, le commentaire ici dans StackOverflow était juste la solution, mais je ne m'en rendais pas compte.
La cause était que la classe Filter était annotée avec @ Component
.
Il en va de même pour l'ajout de @ Bean
à la classe Configuration.
En conséquence, il sera enregistré en dehors de la chaîne de filtrage de sécurité.
La solution est, bien sûr, de ne pas s'enregistrer en tant que bean.
Certaines pages ont un exemple de code avec @ Bean
, donc j'ai pensé que certaines personnes pourraient souffrir du même problème.
Cependant, bien que ce ne soit pas confirmé, si vous n'utilisez pas Spring Boot (starter-web?), Vous risquez de ne pas avoir ce problème.
J'ai eu un indice de la solution pour exclure de FilterRegistrationBean
dans StackOverFlow et j'ai réussi à le résoudre, mais cela ne semble pas être bon simplement en traçant à partir de la source de WebSecurityConfigurerAdapter
.
Comment Spring Security fonctionne dans Hello World a été très utile.
Si je ne pouvais pas le résoudre un autre jour, la pire façon «d'ajouter une instruction if du côté du filtre» scintillait (rires).
Spring Security – security none, filters none, access permitAll Spring Security filter chain not ignoring specified path [duplicate] Fonctionnement de Spring Security dans Hello World
Recommended Posts