[JAVA] DI SessionScope Bean dans le filtre Spring Boot 2

Préface

Récemment, je fais du développement Web avec Spring Boot. J'aimerais autant que possible gérer les sessions avec @SessionScope au lieu d'utiliser HttpSession directement. J'ai étudié comment référencer le @SeesionScope Bean dans le filtre.

Constitution

Nom version
macOS Catalina 10.15.4
IntelliJ IDEA 2019.3.4 (Community Edition)
Java "11.0.2" 2019-01-15
Spring Boot 2.2.6
Kotlin 1.3.71

Des exemples de code et de projets sont disponibles sur GitHub. Jetez un œil si vous le souhaitez.

Conclusion

Il y a beaucoup d'informations et le contenu de l'enquête sera décrit plus tard, mais j'écrirai d'abord à partir de la conclusion. Une configuration simple ne peut être réalisée qu'avec @ Autowired.

UserInfo.kt(@SessionScope)


@Component
@SessionScope
data class UserInfo(
        var name: String?
) : Serializable

SessionFilter.kt(OncePerRequestFilter)


@Component
class SessionFilter : OncePerRequestFilter() {

    //C'était la même chose que DI avec contrôleur.
    @Autowired
    private lateinit var userInfo: UserInfo

    override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) {
        println("name: ${userInfo.name}")
        filterChain.doFilter(request, response)
    }
}

Contexte de la conclusion

Bien que ce ne soit pas un livre de Spring Boot 2, il semble être célèbre dans la région de Spring Présentation approfondie du développement d'applications Spring Java avec Spring Framework DelegatingFilterProxy Une méthode a été proposée pour définir en XML pour enregistrer un filtre dans. Par conséquent, j'ai décidé d'essayer la méthode en utilisant d'abord DelegatingFilterProxy. Je n'aime pas la façon dont il est défini en XML, alors je l'ai réécrit dans Java Config (Kotlin).

SessionFilter.kt(OncePerRequestFilter)


@Component("SessionFilter")  //Je spécifiais un nom.
class SessionFilter : OncePerRequestFilter() {
    :
    : (Identique au code affiché dans la conclusion)
    :
}

WebInitializer.kt


class WebInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
    override fun getRootConfigClasses(): Array<Class<*>>? {
        return null
    }

    override fun getServletMappings(): Array<String> {
        return arrayOf("/")
    }

    override fun getServletFilters(): Array<Filter> {
        val dfp = DelegatingFilterProxy().apply {
            // SessionFilter.kt@Définit le nom spécifié dans Component.
            setTargetBeanName("SessionFilter")
        }
        return arrayOf(dfp)
    }

    override fun getServletConfigClasses(): Array<Class<*>>? {
        return arrayOf(WebConfig::class.java)
    }
}

J'ai vu quelques FAQ qui ne peuvent pas DI dans `Filter, et les contre-mesures ci-dessus ont été introduites, mais dans mon environnement, Conclusion / e02cad0e81ad8ba9d73e #% E7% B5% 90% E8% AB% 96), j'ai atteint l'objectif sans cette description. Il peut y avoir une différence entre Spring MVC et Spring Boot 2, mais il y a trop peu d'informations à étudier.

À la fin

Comparé à d'autres frameworks Web bien connus (bien que je ne pense pas que ce soit un framework Web mineur), j'ai eu l'impression que les informations relatives à Spring sont souvent lourdes et héritées. Par conséquent, j'ai posté un article pour la première fois depuis longtemps, en espérant qu'il serait utile pour quelque chose.

Recommended Posts

DI SessionScope Bean dans le filtre Spring Boot 2
Première botte à ressort (DI)
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Définir le paramètre contextuel dans Spring Boot
Multi-projets Spring Boot 2 avec Gradle
Introduction à Spring Boot ① ~ DI ~
Changements majeurs dans Spring Boot 1.5
NoHttpResponseException dans Spring Boot + WireMock
Accélérez les tests des validateurs qui nécessitent DI dans Spring Boot
Spring Boot Hello World dans Eclipse
Développement d'applications Spring Boot dans Eclipse
Écrire du code de test avec Spring Boot
Qu'est-ce que @Autowired dans Spring Boot?
Implémenter l'application Spring Boot dans Gradle
Comment utiliser Thymeleaf avec Spring Boot
Intégré dans Spring Boot à l'aide d'un fichier de définition de bean nommé application.xml
Lancer un (ancien) projet Spring Boot avec IntelliJ
Créer une image Spring Boot + Docker avec Gradle
Priorité d'accès aux fichiers statiques dans Spring Boot
Sortie du journal Spring Boot au format json
Mémorandum de téléchargement de fichier local avec Spring Boot
Créer un projet Java Spring Boot avec IntelliJ
Utiliser la méthode de requête DynamoDB avec Spring Boot
Modifier le délai d'expiration de la session dans Spring Boot
Bean de sortie au format JSON au printemps
Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
Exécuter un projet Spring Boot avec VS Code
Sortie des journaux de demande et de réponse avec Spring Boot
Défi Spring Boot
Comment ajouter un chemin de classe dans Spring Boot
Conseils Java - Créez un projet Spring Boot avec Gradle
Forme de botte de printemps
Comment se lier avec un fichier de propriétés dans Spring Boot
Spring Boot Rappelez-vous
Annotations utilisées dans les outils de gestion des tâches Spring Boot
[Java] Spring DI ③
Afficher la tâche Gradle dans le projet Spring Boot
Spécifiez le codage des ressources statiques dans Spring Boot
Inclure le pot externe dans le package avec Spring boot2 + Maven3
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Comment définir l'injection de dépendance Spring Boot (DI)
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
[Spring boot] J'ai pensé au code testable par DI
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Testez la classe injectée sur le terrain dans le test de démarrage Spring sans utiliser le conteneur Spring
Présentez swagger-ui à l'API REST implémentée dans Spring Boot
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 2
Spécifiez spring.profiles.active via context-param dans web.xml dans Spring Boot
Spring Boot (série 1) + spring-security-oauth2 + Redis Session + Heroku avec SerializationException
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Inject Logger au printemps
Fiche d'apprentissage SPRING BOOT 01
Cycle de vie du haricot de printemps
Botte de printemps + Heroku Postgres
Résumé de Spring Framework - À propos de DI
Rédaction de mémo de démarrage de printemps (1)