Spring: Werte speichern über Requests hinwege ohne DB

Schuriko

Bekanntes Mitglied
Ich entwickle gerade eine datenbankbasierte Web-Anwendung. Hierbei möchte ich einen Wert über mehrere Requests hinweg für ein bestimmten Anwender festlegen. D.h. der Wert des einen Anwenders kann von dem Wert eines anderen Anwenders unterschiedlich sein. Ich bin am Überlegen diesen Wert in eine Session zu speichern, wie ich es von PHP her kenne. Gibt es in Java, da die Anwendung, ja nicht immer wieder neu ausgeführt wird, einen alternativen - evtl. bessern - Weg?
 

mrBrown

Super-Moderator
Mitarbeiter
Kannst das durchaus in der Session speichern (die allerdings auch in der DB stehen kann...). Eine andere Möglichkeit wäre zB ein Key-Value-Store wie Redis oder vergleichbares.

Weil es Werte sind die nicht in die Datenbank gehören. z.B. (Ja ich weis etwas abwegig) wenn ich den angemeldeten Benutzer mir merken möchte.
Schlechtes Beispiel, weil du dir den nicht selbst merken muss und Spring den je nach Config in einer DB speichert ;)

Um was für Daten geht es denn wirklich?
 

Schuriko

Bekanntes Mitglied
Kannst das durchaus in der Session speichern (die allerdings auch in der DB stehen kann...). Eine andere Möglichkeit wäre zB ein Key-Value-Store wie Redis oder vergleichbares.


Schlechtes Beispiel, weil du dir den nicht selbst merken muss und Spring den je nach Config in einer DB speichert ;)

Um was für Daten geht es denn wirklich?
Ja, deshalb meinte ich auch vielleicht ein etwas abwegig.

Es geht um verschiedene Daten, um ein konkretes Beispiel zum Veranschaulichen herauszunehmen - die gerad vom Benutzer des Systems ausgewählte Sprache
 

Thallius

Top Contributor
Gerade die sollte in der Datenbank stehen. Oder hast du lust auf jedem Rechner von dem aus du die Software benutzt erst wieder die Sprache einzustellen?

Ich habe früher auch viel mit Cookies (Was großartig anderes ist WebStore ja auch nicht) und Sessions gearbeitet. Mitlerweile geht bei mir alles in die DB. Nur dadurch ist gewährleistet, dass der User, egal von wo aus er sich einloggt, immer das gleiche Bild bekommt.

Claus
 

Schuriko

Bekanntes Mitglied
Gerade die sollte in der Datenbank stehen. Oder hast du lust auf jedem Rechner von dem aus du die Software benutzt erst wieder die Sprache einzustellen?
Nein es gibt ja auch eine Datenkbank "languages" mit den gespeicherten, zur Verfügung stehenden Sprachen. Die Tabelle beinhaltet auch eine Feld "default" für einen Standardwert.

ABER:
Angenommen man hat einen Shop. Dieser Shop stellt zum Einkauf n Artikel dar. Der Shop soll international sein sagen wir mal Deutsch, Englisch, Japanisch und Finnisch. Deshalb sind alle Artikel auf diese Sprachen beschrieben.

Jetzt kommt ein potenzieller Käufer auf diesen Shop und schaut sich ein paar Artikel an. Dieser stellt den Shop auf seine Sprache ein, die er versteht. Jetzt will der Käufer natürlich nicht bei jedem anderen Seitenaufruf die Sprache neu einstellen müssen. Also muss für diese Session die Sprache, die der Käufer eingestellt hat, vermerkt werden. Dieses muss das System natürlich wissen, damit er beim Anfordern eines Artikels, diesen in der jeweils ausgewählten Sprache anfordert.


Bisher habe ich es immer über Sessions gelöst. Mein Frage war nun gibt es andere Programmiermöglichkeiten? Wie würdet ihr das lösen. Ich versuche gerad herauszufinden ob man nicht etwas wie Bean Scopes dafür verwenden kann.

Das beschriebene Beispiel mag ich persönlich nicht in der Datenbank vorhalten, aus dem ganz einfachen Grund weil, wenn man es nicht technisch gelöst hat, das System nie weis ob der Benutzer nicht evtl. den Browser geschlossen hat. D.h. mit anderen Worten irgendwann hat man eine Datentabelle mit n Datenzeilen die man nicht mehr benötigt.

Bitte kommt mir jetzt aber nicht mit der (persönlichen Meinung) laienhafte Aussage: "Das ist doch egal ich habe genügend Platz". Weil dieses bestimmt nicht Ressource schonend ist.

Ich habe früher auch viel mit Cookies (Was großartig anderes ist WebStore ja auch nicht) und Sessions gearbeitet. Mitlerweile geht bei mir alles in die DB. Nur dadurch ist gewährleistet, dass der User, egal von wo aus er sich einloggt, immer das gleiche Bild bekommt.

Claus
Deine Annahme geht davon aus das sich der Benutzer einloggen muss - sprich eine eindeutige Identifizierung - um die von diesem Benutzer zuletzt eingestellte Sprache zu ermitteln. Aber in dem beschriebenen Beispiel loggt sich der Benutzer nicht ein. Sprich man kann ihn auf diesen Weg nicht eindeutig identifizieren.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Bisher habe ich es immer über Sessions gelöst. Mein Frage war nun gibt es andere Programmiermöglichkeiten? Wie würdet ihr das lösen. Ich versuche gerad herauszufinden ob man nicht etwas wie Bean Scopes dafür verwenden kann.
Das nutzt letztendlich alles irgendwie die Session.

Das beschriebene Beispiel mag ich persönlich nicht in der Datenbank vorhalten, aus dem ganz einfachen Grund weil, wenn man es nicht technisch gelöst hat, das System nie weis ob der Benutzer nicht evtl. den Browser geschlossen hat.
Angenommen Nutzer stellt seine Sprache ein, schließt den Browser, und öffnet die Seite direkt neu - soll dann die Sprachauswahl weg sein?
 

sascha-sphw

Top Contributor
Deine Annahme geht davon aus das sich der Benutzer einloggen muss - sprich eine eindeutige Identifizierung - um die von diesem Benutzer zuletzt eingestellte Sprache zu ermitteln. Aber in dem beschriebenen Beispiel loggt sich der Benutzer nicht ein. Sprich man kann ihn auf diesen Weg nicht eindeutig identifizieren.
Was stört Dich denn, für diesen speziellen use case, an Cookies; session_lang und gut. Wo meinst Du wird die SessionID beim Client gespeichert während einer laufenden Session?
Und ja, die kannst Du auch Serverseitig abfragen, die werden bei jedem Request vom Client mit zum Server geschickt.
 

Schuriko

Bekanntes Mitglied
Wo meinst Du wird die SessionID beim Client gespeichert während einer laufenden Session?
Session sind keine Cookies.

IDUs werden bei Sessions serverseitig gespeichert, daher sind sie sicherer. Der Ablauf von Sessions kann nicht festgelegt werden, sie verfällt wenn der Browser geschlossen wird.

IDUs werden bei Cookies clientseitig gespeichert, dadurch unsischerer, weil sie durch Hack-Angriffe manipuliert werden könnten.
Die Verfallszeit von Cookies kann festgelegt werden.
 

Schuriko

Bekanntes Mitglied
Na das macht Spring. Wenn du den irgendwo brauchst, lass ihn dir einfach vom Container geben, zB im Controller als Methodenparameter.

EDIT: missverstanden, einfach über einen Cookie, der auch Browser-Neustarts übersteht wenn nötig.
Hab deine Antwort bzgl. meiner Frage nur halbwegs verstanden. Kannst du mir ein Code-Beispiel nenne zum Verständnis?
 

mrBrown

Super-Moderator
Mitarbeiter
Du musst immer etwas Client-Seitig speichern, da du sonst die Session Server-Seitig nicht zuordnen kannst. Nahezu immer ist das eine SessionID in einem Cookie. Ob der Client den manipuliert ist egal, im schlimmstem Fall ist er ausgeloggt (wofür man keinen Cookie manipulieren muss.)

Ob der Browser noch offen ist, kannst du Server-Seitig überhaupt nicht mitbekommen (außer, du setzt auf Longpolling oder Websockets oä, ist aber unüblich).

Was sollen IDUs sein?
 

sascha-sphw

Top Contributor
Session sind keine Cookies.

IDUs werden bei Sessions serverseitig gespeichert, daher sind sie sicherer. Der Ablauf von Sessions kann nicht festgelegt werden, sie verfällt wenn der Browser geschlossen wird.

IDUs werden bei Cookies clientseitig gespeichert, dadurch unsischerer, weil sie durch Hack-Angriffe manipuliert werden könnten.
Die Verfallszeit von Cookies kann festgelegt werden.
Siehe @mrBrown's post. Aber ließ Dich doch bitte nochmal genauer in die Themaik ein, Du hast da ganz kleine Lückchen. ;)

Sicherheit ist prinzipiell Chef- (Server-) Sache, egal was Dir der Client unterjubelt.
 

mrBrown

Super-Moderator
Mitarbeiter
Das stimmt auch alles, wiederspricht allerdings unseren Aussagen überhaupt nicht.

Die Session selbst ist Server-Seitig gespeichert. Eine SessionID, mit der der Client bzw. ein Request, einer Session zugeordnet wird, ist Client-Seitig gespeichert.


Oh, und auch Sessions können natürlich verfallen, es ist zB in Java völlig üblich, dass die nach X Minuten Inaktivität geschlossen wird (Inaktivität ist eben auch der einzige Weg, einen geschlossenen Browser frstzustellen)
 

sascha-sphw

Top Contributor
@mrBrown IDUs sind Identifiy Units
@mrBrown und @sascha-sphw Ihr scheint hier ein paar kleine technischen Irrtümern unterlegen zu sein. Ich zettiere hier aus dem als ersten Eintrag unter Google Suche: "Session vs Cookie" -> "The Difference Between Session und Cookies in PHP" ... ja, ja ich weis es ist PHP, ich denke aber mal Java wird es nicht anders machen. Sollte ich mich Irren, bitte entsprechende Quelle angeben.
Frag Dich doch mal, woher der Server weiß, welche Session er laden muss.
Daher sagte ich in einem anderen Post auch.
Hängt aber stark davon ab was genau Du speichern möchtest.
Bei der temporär eingestellten Sprache würde ich aber sagen, dass die ruhig in einem Cookie verstaut werden kann. Gerade weil Du gesagt hast, dass Du dafür keine Datenbank bemühen möchtest. Du könntest Dich aber bei der Gelegenheit auch mal fragen wie der Server die Daten die zu einer Session gehören verwaltet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
F spring post null werte Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot: Endpoint kann nicht gefunden werden (404) Frameworks - Spring, Play, Blade, Vaadin & Co 15
R Spring Boot läuft nicht auf Ubuntu Frameworks - Spring, Play, Blade, Vaadin & Co 6
OnDemand Spring Boot/Vaadin/Azure Session Speichern Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Aufrufe zu Google Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Spring Boot Embedded mongo Frameworks - Spring, Play, Blade, Vaadin & Co 4
ExceptionOfExpectation Spring Boot Web Werten Übergabe Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Mehrere WebSocket-Instanzen in Spring Boot dynamisch bereitstellen Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Spring Boot Tabellenverknüpfung Frameworks - Spring, Play, Blade, Vaadin & Co 1
W Kotlin: DB-Relationen in Spring Boot Data / Hibernate Frameworks - Spring, Play, Blade, Vaadin & Co 6
ExceptionOfExpectation Spring Boot Thymeleaf Input Type=radio für Enum Property Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Was ist das Framework "Spring"? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Unit/Integrations Testing Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
H Resource Liste Lazy Autowired Spring Context Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
krgewb Spring und GWT - & wird zu & amp; Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JPA/Spring Repository Like Suche leeres Ergebnis Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Spring Initializer - Webservices Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Hateoas Frameworks - Spring, Play, Blade, Vaadin & Co 1
ma095 Spring und Postgresql Errors Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring+Vaadin App startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Request externe API SSL Error Frameworks - Spring, Play, Blade, Vaadin & Co 7

Ähnliche Java Themen


Oben