Cookie beim erstem Zugriff auf Web-App ablegen

ByteArray

Mitglied
Hallo,

ich bin ein Neuling in Sachen Java EE und habe folgende Frage:

Sobald ein User zum allerersten Mal auf die Web-Applikation (z.B. "index.jsp") aufruft, möchte ich eine Cookie beim User anlegen, welches eine Session-ID-Copy beinhaltet. Das klappt jedoch bisher bei mir garnicht. Die Cookie wird garnicht beim User erstellt.

Ich habe es versucht unter einem Session-Filter mit folgendem Listing-Fragment, ohne Erolg:

Java:
...

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

	if(session.isNew()) {

		Cookie cookie = new Cookie("SESSION_ID_COPY", session.getId());
		cookie.setMaxAge(60 * 60 * 24 * 365);
		
		response.addCookie(cookie);
	}

	chain.doFilter(request,response);
}
...

Entweder habe ich von Grund auf etwas falsch verstanden oder ich kenne keine weitere Implementation dazu.

Es wäre sehr sehr hilfreich, wenn irgendjemand mir dabei auf die Sprünge helfen würde, denn ich bin mit meinem Nerven am Ende! :rolleyes:
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Ich habe es versucht unter einem Session-Filter
Sowas jibbet nicht. Dein Code sieht wie die Implementierung von javax.servlet.Filter aus. Abgesehen davon kompiliert der hinten und vorne nicht. Aber er war ja wohl auch nur gedacht, zu zeigen, was Du möchtest.

Das Grundsatzproblem ist, dass das Filter Interface mit den Klassen von javax.servlet arbeitet und nicht mit deren Spezialisierungen aus javax.servlet.http. Du willst aber mit Http-Spezialitäten (Sesstion, Cookies) arbeiten. Ich habe wirklich lange gesucht, ob es auch sowas wie einen HTTP-Filter gibt oder andere Punkte, an denen man ansetzen könnte. Was passendes gefunden hab ich allerdings nicht. Deswegen habe ich folgenden (nicht ganz eleganten und ungetesteten) Vorschlag:
Java:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    if ( request instanceof HttpServletRequest && response instanceof HttpServletResponse ) {
       addCookieIfSessionNew( (HttpServletRequest ) request, (HttpServletResponse) response);
    }

    chain.doFilter(request,response);
}

private void addCookieIfSessionNew(HttpServletRequest request, HttpServletResponse response) {

  final HttpSession session = request.getSession(false);

  if ( session != null && session.isNew() ) {
    
    final Cookie cookie = new Cookie("SESSION_ID_COPY", session.getId());
        cookie.setMaxAge(60 * 60 * 24 * 365);
        
        response.addCookie(cookie);
  }
}

Zu beachten ist, dass Filter in der Reihenfolge der Schrittte der Bearbeitung eises Requests durch den Container relativ weit vorne kommen. D.h. es kann sein, dass zu diesem Zeitpunkt der Bearbeitung noch keine HttpSession erzeugt wurde, sie es aber im weiteren Verlauf wird.
 
Zuletzt bearbeitet von einem Moderator:

ByteArray

Mitglied
Sowas jibbet nicht. Dein Code sieht wie die Implementierung von javax.servlet.Filter aus. Abgesehen davon kompiliert der hinten und vorne nicht. Aber er war ja wohl auch nur gedacht, zu zeigen, was Du möchtest.

Das Grundsatzproblem ist, dass das Filter Interface mit den Klassen von javax.servlet arbeitet und nicht mit deren Spezialisierungen aus javax.servlet.http. Du willst aber mit Http-Spezialitäten (Sesstion, Cookies) arbeiten. Ich habe wirklich lange gesucht, ob es auch sowas wie einen HTTP-Filter gibt oder andere Punkte, an denen man ansetzen könnte. Was passendes gefunden hab ich allerdings nicht. Deswegen habe ich folgenden (nicht ganz eleganten und ungetesteten) Vorschlag:
Java:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    if ( request instanceof HttpServletRequest && response instanceof HttpServletResponse ) {
       addCookieIfSessionNew( (HttpServletRequest ) request, (HttpServletResponse) response);
    }

    chain.doFilter(request,response);
}

private void addCookieIfSessionNew(HttpServletRequest request, HttpServletResponse response) {

...

}

Zu beachten ist, dass Filter in der Reihenfolge der Schrittte der Bearbeitung eises Requests durch den Container relativ weit vorne kommen. D.h. es kann sein, dass zu diesem Zeitpunkt der Bearbeitung noch keine HttpSession erzeugt wurde, sie es aber im weiteren Verlauf wird.

Vielen Dank für das Beispiel, jedoch habe ich auch sowas ähnliches probiert und es lief, jedoch die Cookie wurde trotzdem garnicht angelegt beim allererstem Zugriff auf die Web-Applikation. Erst beim zweitem aufruf der Web-Appliaktion wird die Cookie mit:

Java:
...

if(session.isNew() == false) {

Cookie cookie = new Cookie(...);

response.addCookie(cookie);

}

angelegt, wieso?

Beim allererstem Zugriff auf die Website wird ja schließlich eine Session-ID erstellt (auch die Cookie mit "JSESSIONID") und die JSession-Cookie sofort angelegt. Dabei will ich gleichzeitig (gleich beim allerstem Request) eine Cookie mitablegen, damit ich z.B. beim nächsten Zugriff auf die Webseite den Userdaten oder Warenkorb mit der alten Session-ID-Cookie vergleichen und mit der Datenbank weiter interagieren kann.

So könnte ich beim nächstem Request die Userdaten, wie Logindaten authentifizieren oder den Warenkorb per alten gespeicherten Session-ID-Copy-Cookie mit Datenbank-Backend deserialisieren/wiederherstellen/wiedererkennen.

Dabei dachte ich, dass ich mit einem Session-Filter soetwas realisieren könnte, um unteranderem auch beim jeden Request sicherstellen kann, dass die abgelegten Userdaten richtig sind (als Sicherheitsfunktion beispielweise) und die den Warenkorb mit der alten und neuen Session-ID-Cookie wiedererkennen/wiederherstellen kann.

Noch weitere Ideen?
 
Zuletzt bearbeitet:

ByteArray

Mitglied
Ich habe es nach vielen Tagen endlich gefunden!

Ich habe innerhalb meiner SessionFilter-Klasse instanzierend auf eine eigene CookieVerarbeitungs-Klasse zugegriffen, wobei ganz oben im Quellcode bei der Klassenangabe folgende Angabeendung fehlte:

"public class CookieManager extends HttpServlet"

Damit kann ich sofort beim allerersten und späteren Zugriffen (Requests) immer jenachdem eine weitere Cookie gleichzeitig, neben der standartmäßigen angelegten Cookie "JSESSIONID" anlegen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
MQue Session - Cookie Allgemeines EE 27
T Cookie setzen in einer JSP Datei Allgemeines EE 4
P cookie der shoutbox woanders verwenden? Allgemeines EE 5
D Hilfe beim Quartz Scheduler Allgemeines EE 11
D Probleme beim Umstieg auf Jakarta EE Allgemeines EE 5
K Konfiguration beim AppServer Allgemeines EE 4
A JPA Fehler beim JPA-Projekt Allgemeines EE 12
M Servlet Fehler beim Start der Serveranwendung Allgemeines EE 3
B @Startup - FileWatcher - Probleme beim Hochfahren des Servers Allgemeines EE 4
I Erhöhte Sicherheit beim Login Allgemeines EE 1
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
S OpenJPA-Exception beim Tomee Allgemeines EE 0
B Problem beim Lesen des Codes... Allgemeines EE 2
R JPA Problem beim Speichern eines Users Allgemeines EE 2
D Jboss löscht Archiv nicht beim Redeployed Allgemeines EE 3
Fu3L Probleme beim Einrichten Allgemeines EE 3
J Fehler beim deployen von seam 2.2.2-Projekt Allgemeines EE 9
B Problem beim einbinden einer CSS in eine JSP Allgemeines EE 8
S Eclipse: Teilmodule beim Testen werden nicht gestartet Allgemeines EE 2
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
H fehler beim deployen von ear file Allgemeines EE 2
G Exception beim versenden einer Mail Allgemeines EE 3
A Tomcat, Exceptions beim redeploy Allgemeines EE 4
H GWT Problem beim Ausführen Allgemeines EE 8
E Performance-Problem beim ersten Request Allgemeines EE 4
MQue URL im Brower beim Starten der Anwendung richtig setzen Allgemeines EE 4
M J2EE beim SCJA Allgemeines EE 4
M JSP: Tomcat: Serverfehler 500 nur beim IE. Allgemeines EE 2
M Absturz beim Einbinden des PostgreSQL-Treibers Allgemeines EE 4
K BatchUpdateException beim schreiben in DB Allgemeines EE 12
M EJB Löschen von DB-Daten beim Deployen verhindern Allgemeines EE 2
M tomcat beim booten mit starten Allgemeines EE 4
G JBoss nutzt beim starten ständig das Root.war Allgemeines EE 12
B Fehlermeldung beim ausführen des Clients // Need Help Allgemeines EE 2
P jar-File aus war-File beim Deploy automatisch entpacken Allgemeines EE 2
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
T Probleme beim Einsatz von J2EE / JBoss Allgemeines EE 4
F Wie Heapsize beim Tomcat erhöhen? Allgemeines EE 3
G suche Hilfe beim TreeView Servlet Allgemeines EE 8
A Problem / Fehler beim Einbinden einer Klasse in ein JSP Allgemeines EE 20
N Wie heisst das was der Client beim Http Server anfragt? Allgemeines EE 6
F richtige vorgehensweise beim logout Allgemeines EE 6
F Fehlermeldung beim redirect in der JSP Allgemeines EE 4
T Design/Performance-Frage beim servlet (static oder nicht) Allgemeines EE 35
F Fehler beim deployen von jsp und servlet Allgemeines EE 7
M NetBeans 5.5 installiert und schon hängt was beim Deployen Allgemeines EE 5
G Servlet beim Absenden eines Formulars aufrufen Allgemeines EE 11
M Probleme beim Performancetuning des Servlets Allgemeines EE 2
T Änderung des Wertes einer Variable beim Klick auf Link Allgemeines EE 7
K [Sun AppServer 8.1] Fehler beim deployen Allgemeines EE 12
FsMarine Probleme beim ausführen von JSP dateien unter Tomcat Allgemeines EE 4
M Probleme beim Webservice Deployment(Sun ApplicationServer) Allgemeines EE 2
B Problem beim Deployen auf Sun AS 8.1 Allgemeines EE 12
R Problem beim hochladen einer Web Application Allgemeines EE 16
H Problem beim Umstieg von 1.3 auf 1.4 Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben