[JAVA] DI SessionScope Bean im Spring Boot 2-Filter

Vorwort

Vor kurzem mache ich Webentwicklung mit Spring Boot. Ich möchte Sitzungen mit @SessionScope so weit wie möglich verwalten, anstatt HttpSession direkt zu verwenden. Ich habe untersucht, wie die @SeesionScope Bean im Filter referenziert wird.

Verfassung

Name Ausführung
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

Beispielcode und Projekte sind auf [GitHub] verfügbar (https://github.com/devnokiyo/UseSessionScopeBeanInFilter). Bitte schauen Sie, wenn Sie möchten.

Fazit

Es gibt viele Informationen und der Inhalt der Untersuchung wird später beschrieben, aber ich werde zuerst aus der Schlussfolgerung heraus schreiben. Eine einfache Konfiguration konnte nur mit "@ Autowired" erreicht werden.

UserInfo.kt(@SessionScope)


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

SessionFilter.kt(OncePerRequestFilter)


@Component
class SessionFilter : OncePerRequestFilter() {

    //Es war das gleiche wie bei DI mit Controller.
    @Autowired
    private lateinit var userInfo: UserInfo

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

Hintergrund zum Abschluss

Obwohl es sich nicht um ein Buch von Spring Boot 2 handelt, scheint es im Bereich Spring Gründliche Einführung in die Entwicklung von Spring Java-Anwendungen mit Spring Framework DelegatingFilterProxy berühmt zu sein Es wurde ein Verfahren vorgeschlagen, bei dem XML die Registrierung von Filtern in definiert. Aus diesem Grund habe ich mich entschlossen, die Methode zuerst mit "DelegatingFilterProxy" auszuprobieren. Ich mag die Art und Weise, wie es in XML definiert ist, nicht, deshalb habe ich es in Java Config (Kotlin) umgeschrieben.

SessionFilter.kt(OncePerRequestFilter)


@Component("SessionFilter")  //Ich habe einen Namen angegeben.
class SessionFilter : OncePerRequestFilter() {
    :
    : (Entspricht dem in der Schlussfolgerung angegebenen Code)
    :
}

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@Legt den in Komponente angegebenen Namen fest.
            setTargetBeanName("SessionFilter")
        }
        return arrayOf(dfp)
    }

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

Ich habe einige FAQs gesehen, die in `Filter nicht angezeigt werden können, und die oben genannten Gegenmaßnahmen wurden eingeführt, aber in meiner Umgebung Schlussfolgerung / e02cad0e81ad8ba9d73e #% E7% B5% 90% E8% AB% 96) habe ich den Zweck ohne diese Beschreibung erreicht. Möglicherweise gibt es einen Unterschied zwischen Spring MVC und Spring Boot 2, aber es gibt zu wenig Informationen, um dies zu untersuchen.

Am Ende

Im Vergleich zu anderen bekannten Webframeworks (obwohl ich nicht glaube, dass es sich um ein kleines Webframework handelt) hatte ich den Eindruck, dass Spring-bezogene Informationen oft umständlich und veraltet sind. Daher habe ich zum ersten Mal seit langer Zeit einen Artikel veröffentlicht, in der Hoffnung, dass er für etwas nützlich sein würde.

Recommended Posts

DI SessionScope Bean im Spring Boot 2-Filter
Erster Frühlingsstiefel (DI)
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
Legen Sie den Kontextparameter in Spring Boot fest
Spring Boot 2 Multiprojekt mit Gradle
Einführung in Spring Boot ~ ~ DI ~
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Beschleunigen Sie das Testen von Validatoren, für die DI im Spring Boot erforderlich ist
Frühlingsstiefel Hallo Welt in Eclipse
Spring Boot-Anwendungsentwicklung in Eclipse
Schreiben Sie den Testcode mit Spring Boot
Was ist @Autowired im Spring Boot?
Implementieren Sie die Spring Boot-Anwendung in Gradle
Verwendung von Thymeleaf mit Spring Boot
Wird in Spring Boot mithilfe einer Bean-Definitionsdatei mit dem Namen application.xml angepasst
Starten Sie mit IntelliJ ein (altes) Spring Boot-Projekt
Erstellen Sie mit Gradle ein Spring Boot + Docker-Image
Statische Dateizugriffspriorität beim Spring Boot
Spring Boot-Protokoll im JSON-Format ausgeben
Memorandum zum Herunterladen lokaler Dateien mit Spring Boot
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Ändern Sie das Sitzungszeitlimit in Spring Boot
Ausgabe Bean als JSON im Frühjahr
SameSite-Cookie im Spring Boot (Spring Web MVC + Tomcat)
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Fordern Sie Spring Boot heraus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
Spring Boot Form
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Spring Boot Denken Sie daran
Anmerkungen, die in Spring Boot-Aufgabenverwaltungstools verwendet werden
[Java] Spring DI ③
Zeigen Sie die Gradle-Aufgabe im Spring Boot-Projekt an
Geben Sie die statische Ressourcencodierung in Spring Boot an
Nehmen Sie das externe Glas mit Spring boot2 + Maven3 in das Paket auf
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
So stellen Sie Spring Boot Dependency Injection (DI) ein
Untersuchte asynchrone Ausführung von Abfragen in Spring Boot 1.5.9
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
[Spring Boot] Ich dachte über testbaren Code von DI nach
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Testen Sie die Klasse mit Feldinjektion im Spring-Boot-Test, ohne den Spring-Container zu verwenden
Führen Sie swagger-ui in die in Spring Boot implementierte REST-API ein
Bis Sie mit der Entwicklung mit Spring Boot in Eclipse 2 beginnen
Geben Sie spring.profiles.active über context-param in web.xml in Spring Boot an
Spring Boot (1 Serie) + spring-security-oauth2 + Redis Session + Heroku mit SerializationException
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Injizieren Sie den Logger im Frühjahr
SPRING BOOT Lernaufzeichnung 01
Lebenszyklus der Frühlingsbohnen
Frühlingsstiefel + Heroku Postgres
Spring Framework Zusammenfassung - Über DI
Schreiben von Frühlingsstiefel-Memos (1)