[JAVA] Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs

Exemple de réglage

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.

Où j'étais accro

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.

Cause et solution

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).

référence

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

Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
HTTPS avec Spring Boot et Let's Encrypt
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Hash des mots de passe avec Spring Boot + Spring Security (avec sel, avec étirement)
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Créez un serveur Spring Cloud Config en toute sécurité avec Spring Boot 2.0
Télécharger avec Spring Boot
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Paramètres d'échange à chaud Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Fonction de connexion avec Spring Security
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Paramètres liés aux performances de Spring Boot
Essayez d'utiliser Spring Boot Security
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Application Spring Boot qui spécifie les paramètres de connexion à la base de données avec des paramètres
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Avec Spring Boot, hachez le mot de passe et utilisez l'enregistrement des membres et la sécurité Spring pour implémenter la fonction de connexion.
Développement facile d'applications Web avec STS et Spring Boot. Dans 10 minutes.
Paramètres du chemin de contexte Spring Boot 2.x
Utiliser l'authentification de base avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ②
Points de révision du code de l'application Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Déploiement à chaud avec le développement Spring Boot
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
J'ai essayé d'implémenter un client OAuth avec Spring Boot / Security (connexion LINE)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Partie 1: Essayez d'utiliser la connexion OAuth 2.0 prise en charge par Spring Security 5 avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ①
Obtenez des résultats de validation avec Spring Boot
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
(Intellij) Hello World avec Spring Boot