Problem mit Session - Übergabe von Kontext zu Kontext

Status
Nicht offen für weitere Antworten.

starr

Neues Mitglied
Hallo,

ich habe eine Frage bezüglich Session Tracking. Und zwar habe ich eine Hauptanwendung, die die Benutzerverwaltung übernimmt und weitere Anwendungen innerhalb, die durch einen erfolgreichen Login erreicht werden können. Nun habe ich ein Problem mit einer inneren Anwendung, dass die Sessionübergabe nicht funktioniert bzw. die jsessionid verloren geht. Die Hauptanwendung sowie die inneren Applikationen haben einen eigenen Kontext.

Um der Sache auf den Grund zu gehen habe ich mal folgende Methoden ausprobiert:

Code:
request.isRequestedSessionIdValid() --> false
request.getRequestedSessionId() --> erhalte die jsessionid aus dem cookie
request.isRequestedSessionIdFromCookie() --> true
request.isRequestedSessionIdFromURL() --> false
request.isRequestedSessionIdValid() --> false

Komischerweise erkennt er den Cookie und gibt auch die jsessionid zurück. Trotzdem erzeugt die ServletControler Klasse der Unteranwendung eine neue Session.

Hier ein Auszug der ServletControler Klasse die dafür zuständig ist:

Code:
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
	{
		
		res.setContentType("text/html");
		PrintWriter out = res.getWriter();
		HttpSession session = req.getSession();
	    controlsession = new SessionBean();	
	    setnumPhrasen();
	    
		ServletContext cxt = getServletContext();	
		RequestDispatcher rd = cxt.getRequestDispatcher("/beziehungstypen.jsp");
		int i = 0;

		
		if (session.isNew()) 
		{
            // nach 5 Minuten wird die Session beendet
			session.setMaxInactiveInterval(600);
			session.setAttribute("controlsession", controlsession);
			if(controlsession.setNaechstePhrase())
			{		
				rd.include(req, res);
            }
        }
        else 
        {  
        	controlsession = (SessionBean) session.getAttribute("controlsession");
            
            /*Unterbindet das Reloaden und Zurückspringen der Seite*/
            if(req.getParameter("reload")!=null && Integer.parseInt(req.getParameter("reload"))==(controlsession.getPhrasenNummer() ) )
            {          
            	if ((req.getParameter("submit") != null) && (req.getParameter("submit").equals("Antwort")))       	
            	{   
            		
            		ArrayList antworten=controlsession.getKorrekteAntwort();
            		Iterator iter_antworten = antworten.iterator();
            		for(i=0;i<controlsession.getAnzahlAktuelleEntitiesPaare();i++) 
            		{						
            			String b=(String)iter_antworten.next();
            			controlsession.setAntworten(req.getParameter("answer"+i));
            			if (req.getParameter("answer"+i).equals(b)) 
            			{
            				controlsession.setEntitiesKorrekt(true);
            				controlsession.setNumKorrekteAntwortenEntities(controlsession.getNumKorrekteAntwortenEntities()+1);
            			}
            			else 
            			{
            				controlsession.setEntitiesKorrekt(false);
            			}				
            		}
				
            		if(controlsession.getAnzahlAktuelleEntitiesPaare()==controlsession.getNumKorrekteAntwortenEntities())
            		{
            			controlsession.setLetztePhraseKorrekt(true);
            			controlsession.setNumKorrekteAntworten(controlsession.getNumKorrekteAntworten()+1);
            		}
            		else
            		{
            			controlsession.setLetztePhraseKorrekt(false);
            		}          		
				
            		if(controlsession.getGenutzePhrasen().size() == numPhrasen.intValue() || controlsession.getGenutzePhrasen().size()==controlsession.getAnzahlPhrasenDB()) 
            		{
            			rd = cxt.getRequestDispatcher("/beziehungstypen_end.jsp");
            			rd.include(req, res);                  
            			session.invalidate();
            		}
            		else 
            		{    
            			controlsession.setReloadForm(false);
            			rd = cxt.getRequestDispatcher("/beziehungstypen_check.jsp");
            			rd.include(req, res);       
        				return;
                    
            		}
            	} 
            	
            	else if ((req.getParameter("submit") != null) && (req.getParameter("submit").equals("Weiter"))) 
            	{
            		if(controlsession.setNaechstePhrase())
        			{
        				controlsession.setReloadForm(false);
        				rd.include(req, res);                    
        				return;
        			}
            		else
            		{
            			rd = cxt.getRequestDispatcher("/beziehungstypen_end.jsp");
            			rd.include(req, res);
            			session.invalidate();
            		}
            	}
            	else            		
            	{
            		if(controlsession.getGenutzePhrasen().size() == numPhrasen.intValue() || controlsession.getGenutzePhrasen().size()==controlsession.getAnzahlPhrasenDB()) 
            		{
                	
            			rd = cxt.getRequestDispatcher("/beziehungstypen_end.jsp");
            			rd.include(req, res);
            			session.invalidate();
            		}
            		else 
            		{          	
            			rd.include(req, res);
            		}
            	}
            }
			else
			{
				controlsession.setReloadForm(true);
				rd.include(req, res);
			}
        }
        out.flush();
    }

Ich hoffe jemand hat eine Idee. Wenn weitere Informationen notwendig sein sollten liefere ich die gerne nach.

P.s. Das ist nicht mein eigenes Projekt...

Dank im voraus und Grüße
starr
 

HLX

Top Contributor
HttpSessions sind immer auf einen ServletContext, also auf eine Anwendung bezogen. Wenn du also die Anwendung wechselst und erstmalig betritts, wird innerhalb dessen ServletContext keine HttpSession zu deiner JSessionId gefunden und somit eine neue Session angelegt. Die Übertragung von Sessionobjekten zwischen Anwendungen macht keinen Sinn, da die Session oft anwendungsspezifische Daten hält, welche von einer anderen Anwendung nicht erkannt werden können.

Die Lösung deines Problems ist die Übertragung aller relevanten Informationen per Requestparameter. In der empfangenden Anwendung müssen die Parameter ausgewertet und an die neu erzeugte Session gebunden werden.
 
R

ralf.zahn

Gast
Oder - falls es zu viele Daten sind, dann in einer Nachricht kapseln und per JMS an die Anwendung schicken...?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JSF Problem wenn Session abgelaufen ist Web Tier 6
T Problem bei Session-Timeout Web Tier 3
S AJAX/RestController Post Problem Web Tier 18
pkm Problem beim Import eines dynamischen Webprojekts als .zip Web Tier 2
O JSF Java Unsigned Applet PrivilegedActionException Problem Web Tier 2
F JSF preRenderView Problem Web Tier 0
J Funktion für AJAX - Problem mit Return Web Tier 14
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
N JSF JSF Selected Item & GesBetrag Problem Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Problem mit Primefaces Web Tier 7
F JSF Problem mit Primefaces Web Tier 4
F JSP Problem mit Property Web Tier 0
D Java EE Servlet login Problem Web Tier 1
L java.io.NotSerializableException für domain Objekte - Design Problem? Web Tier 12
T JSF Character Encoding Problem Web Tier 2
T JSF Problem mit JSF und Foreign Key Tabellen Web Tier 8
H JSF Problem mit Converter Web Tier 2
M Zeichensatz Problem? Web Tier 3
K JSF websphere application server 8 tomahawk problem Unable to find resource Web Tier 3
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
J JSF Problem mit Bearbeiten von Datensätzen Web Tier 7
M JSF Problem mit CSS und Unterverzeichnissen Web Tier 2
M JSP Problem beim deployen auf Tomcat Web Tier 2
P Servlet getWidth(); - getHight(); Problem Web Tier 3
J JSP Problem bei Hibernate mit JSP Web Tier 2
M JSF mit Tobago Problem: ServletContextListener Web Tier 5
J Facelets javascript compiler problem Web Tier 3
T Tomcat mit Servlets Problem Web Tier 7
T Servlet Problem bei gwt rpc Web Tier 7
S Servlet Problem mit Tomcat Web Tier 3
J JSF Kein Methodenaufruf mit Button möglich durch PhaseListener (redirect) Problem? Web Tier 2
P rich:panelMenuGroup --> expanded Parameter Problem Web Tier 3
F.S.WhiTeY Tmplating/CSS Problem bei JSF Web Tier 7
A ice:inputText Converter Problem Web Tier 2
B JSF Tomcat Windows Linux equals Problem Web Tier 3
R JSF JSF Composite Components: Problem mit Attributliste und Referenzierung Web Tier 2
M Problem mit Hibernate und GWT Web Tier 6
O JSP struts2 tag: Problem mit Dezimalzahlen Web Tier 2
P Struts Struts2 if tag Problem mit getText() Web Tier 3
B Java EE 6 Problem (EL) Web Tier 4
ruutaiokwu beanshell scope problem... Web Tier 7
P Problem mit HTML.Tag.OPTION Web Tier 3
N Problem mit Datei Streaming Web Tier 2
M Problem mit Verlinkung JSP Dynamische Tabelle Web Tier 7
S Architektur-Problem? 2 Servlets, ein Objekt Web Tier 4
F.S.WhiTeY JSF:org.apache.jasper.JasperException Problem Web Tier 2
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
N Servlet: Problem mit getParameterValues Web Tier 4
7 Struts und Ajax. Problem mit Actions Web Tier 2
J GWT - RPC Problem Web Tier 6
F Problem mit JSF Anwendung Web Tier 9
I Logout - Problem => Bei Zurück Web Tier 2
I AJAX - Problem Web Tier 18
F Problem mit Struts Web Tier 2
I selectOneMenu - Problem Web Tier 6
H Firefox Background-Image Problem Web Tier 4
E GWT Server-Client Problem Web Tier 3
J Log4j problem Web Tier 7
F Problem mit der Methode request.getRemotePort() Web Tier 2
S GWT Problem Web Tier 4
M Problem mit Velocity Web Tier 2
S OSGi Bundle Problem - ClassNotFound Web Tier 4
J JSF Locales Problem Web Tier 3
J Problem mit Login Web Tier 4
MQue jsp- Problem Web Tier 4
P Problem der Parameterübergabe aus Iframe Web Tier 15
A Tomcat: beim Start des Servers einmalige Aktion aufrufen (Problem gelöst) Web Tier 2
R JSF <rich:datatable> problem Web Tier 4
S JSF Problem - Terminverwaltung - Ändern eines vorhandenen Termins Web Tier 2
S Filter Problem? Web Tier 6
E Problem mit t:saveState Web Tier 7
S Problem mit Anzeige zweier JSP's Web Tier 4
M Problem mit JSP und Bean Web Tier 2
F RichFaces, Problem mit PickList Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
E Problem mit request.getParameter Web Tier 5
B getServletContext.getRealPath("/") Problem Web Tier 6
C Problem mit Hibernate und IceFaces Web Tier 2
H problem bei Parameterübergabe mit beans Web Tier 3
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
S jsf: übles problem mit <f:convertDateTime> Hilfe! Web Tier 2
A Selectbox Problem in JSP Web Tier 12
S problem mit resultset Web Tier 6
U Problem bei Validierung mit Struts 2 Web Tier 1
A JSF-Ctrl h:inputText Problem mit Umlauten Web Tier 4
I Gleiche Session von EJB Container in JSF Container verwenden? Web Tier 21
R Session löschen Web Tier 3
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
J Session Servlet - JavaScript Web Tier 6
M Session closed - und nun? Web Tier 1
F JSF synchronized(session) Frage ? Web Tier 1
F JSF p:selectOneMenu Session Web Tier 10
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
D JSF Überprüfen der Session ID in JSF und JAVA Web Tier 9
R Servlet Resource laden für SMTP - Session Web Tier 4
B JSF Mojarra 2.1.5: java.lang.IllegalStateException: Cannot create a session after the response has been Web Tier 7
R JSF Session Handling Web Tier 3
X JSP Auslesen der Daten einer Session Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben