Java >> Java Tutorial >  >> Tag >> Spring

Sitzungsverwaltung mit Spring-Session und JDBC

Die Benutzersitzungsverwaltung ist von entscheidender Bedeutung, um den Benutzerstatus in einer Anwendung beizubehalten. Die Sitzung hilft dabei, den Überblick zu behalten, wo sich der Benutzer gerade befindet, und wenn er zurückkommt, um die Anwendung zu überprüfen, kann sie in einem ähnlichen Zustand abgerufen werden. In diesem Beitrag werde ich zeigen, wie die Spring-Sitzung mit der Datenbank verwendet wird, um Sitzungsdaten zu verwalten.

Frühjahrssession

Spring Session bietet APIs zum Verwalten von Benutzersitzungen. Dies bietet die Flexibilität, eine Anwendung auf Unternehmensebene mit Spring Boot zu erstellen und dennoch mit Spring Session zu trennen. Ein weiterer Vorteil der Verwendung von Spring Session besteht darin, dass sie verschiedene Speicheroptionen bietet. Sie können die Sitzungsdaten in Redis, Datenbank mit JDBC oder In-Memory speichern. Da wir die Sitzungsdaten in der Datenbank speichern können, gehen die Sitzungsdaten nicht verloren, wenn die Anwendung heruntergefahren wird oder abstürzt. Dies hilft, Benutzersitzungen iterativ zu verwalten.

In diesem Beitrag zeige ich, wie ich die Spring Session in meiner Anwendung Mieter-Feedback verwendet habe.

Erstellen Sie eine auf Spring Boot basierende Anwendung

Ich werde nicht zeigen, wie man eine Spring Boot-basierte Anwendung erstellt. Voraussetzung ist, dass Sie die Grundlagen von Spring Boot kennen. Sobald Sie eine Maven-basierte oder Gradle-basierte Spring-Boot-Anwendung erstellt haben, können Sie eine Abhängigkeit für die Spring-Sitzung hinzufügen.

org.springframework.session:spring-session-jdbc:2.1.6.RELEASE

Speichertyp konfigurieren

Mit der Spring-Sitzung haben Sie mehrere Optionen zum Konfigurieren des Speichertyps. In diesem Beitrag werde ich zeigen, wie eine Datenbank mit JDBC verwendet wird, um Benutzersitzungsdaten zu speichern. Mit Einstellung application.properties Sie können erforderliche Sitzungstabellen im Handumdrehen erstellen ODER Sie können sie erstellen, bevor Sie Ihre Anwendung starten, sodass Sie sie nicht immer erstellen müssen.

Aus Sicht des Produktionssystems bevorzuge ich es, Tabellen beim einmaligen Einrichten einer Anwendung zu erstellen und mich nie darum zu kümmern.

Bevor wir also die Frühjahrssitzung verwenden können, erstellen Sie die erforderlichen Datenbanktabellen in der Datenbank Ihrer Wahl. In diesem Beitrag verwende ich mysql für Datenbank.

Erstellen Sie die folgenden beiden Datenbanktabellen in Ihrer Anwendungsdatenbank

create table SPRING_SESSION (
primary_id CHAR(36) NOT NULL,
session_id CHAR(36) NOT NULL,
creation_time BIGINT NOT NULL,
last_access_time BIGINT NOT NULL,
max_inactive_interval INT NOT NULL,
expiry_time BIGINT NOT NULL,
principal_name VARCHAR(100),
CONSTRAINT spring_session_pk PRIMARY KEY (primary_id)
);

create table SPRING_SESSION_ATTRIBUTES (
session_primary_id CHAR(36) NOT NULL,
attribute_name VARCHAR(200) NOT NULL,
attribute_bytes BLOB NOT NULL,
CONSTRAINT spring_session_attributes_pk PRIMARY KEY (session_primary_id, attribute_name),
CONSTRAINT spring_session_attributes_fk FOREIGN KEY (session_primary_id) REFERENCES SPRING_SESSION(primary_id) ON DELETE CASCADE
);

Konfigurieren Sie Ihren application.properties wie folgt:

spring.datasource.url=jdbc:mysql://127.0.0.1/sampledb?autoReconnect=true&useSSL=true
spring.datasource.username = sa
spring.datasource.password=*********
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=never
spring.session.jdbc.table-name=spring_session

Ein Grund, warum wir spring.session.jdbc.initialize-schema=never angegeben haben liegt daran, dass wir die Datenbanktabellen manuell erstellen.

Um nun die Spring-Sitzung in unserer Anwendung zu verwenden, konfigurieren wir die Spring-Sicherheit und aktivieren @EnableWebSecurity . Grundsätzlich ermöglicht uns dies eine formularbasierte Authentifizierung und bei der Authentifizierung können wir eine gültige Sitzung erstellen und in der Datenbank für angemeldete Benutzer speichern.

Ich werde nicht zeigen, wie Spring Security aktiviert wird, Sie können meinen alten Beitrag über die Verwendung von Spring Security in der Spring Boot-Anwendung lesen.

JDBC-HTTP-Sitzung konfigurieren

Als Teil dieser Implementierung ist es wichtig, Spring Session in der Anwendung zu aktivieren, indem Sie die Anmerkung @EnableJdbcHttpSession verwenden wie unten gezeigt:

@SpringBootApplication
@EnableJdbcHttpSession
public class HomeApplication extends SpringBootServletInitializer
{
	public static void main(String[] args)
	{
		SpringApplication.run(HomeApplication.class, args);
	}

}

Gemäß der Spring-Dokumentation hier Spring Session, die Anmerkung @EnableJdbcHttpSesion fügt eine Bean mit dem Namen springSessionRepositoryFilter hinzu . Dieser Filter übernimmt das Ersetzen der Http-Sitzungsimplementierung durch Spring Session.

Anwendung ausführen

Um nun die gesamte Anwendung zu sehen, können wir die folgende Aufzeichnung sehen, um zu sehen, wie die Spring Boot-basierte Anwendung die Sitzung erstellt und in der Datenbank speichert.

Abschließend haben wir gezeigt, wie die Sitzungsverwaltung mithilfe der Spring Session implementiert wird.

Referenzen

  1. Frühjahrssession – Frühlingssession
  2. Frühjahrssitzung mit JDBC – Frühlingssitzung mit JDBC


Java-Tag