Hallo Leute,
ich versuche gerade einen Login über eine WS hinzubekommen. Die Userdaten sollen dann in einer Sessionvariablen gespeichert werden.
Das ist alles kein Problem, jedoch wird bei mir für jeden Request eine neue Session generiert. Leider versteh ich nicht wo meine Fehler ist. Hier mal ein vereinfachtes Beispiel.
Über die Methode login wird getSession aufgerufen, welche mir über den MessageContext eine HttpSession zurückliefert. Hier schreibe ich dann mit session.setAttribute meine Werte in die Session.
printSessionInfo zeigt mir diese dann auch an.
Wenn ich aber dann im Client eine 2. Anfrage direkt auf printSessionInfo losschicke, mir wieder die Session hole und die Werte auslese, so ist die SessionId eine komplett andere und natürlich bekomm ich über getAttributes die Werte nicht mehr zurück. Im Gegensatz funktioniert das Ganze für Servlets auf meinem Server wunderbar.
Warum wird die Session nicht wieder aufgegriffen? Wird diese überhaupt gespeichert oder immer überschrieben?
Bitte helft mir weiter...ich verzweifel sonst noch...
Client:
Ausgabe Konsole:
ich versuche gerade einen Login über eine WS hinzubekommen. Die Userdaten sollen dann in einer Sessionvariablen gespeichert werden.
Das ist alles kein Problem, jedoch wird bei mir für jeden Request eine neue Session generiert. Leider versteh ich nicht wo meine Fehler ist. Hier mal ein vereinfachtes Beispiel.
Über die Methode login wird getSession aufgerufen, welche mir über den MessageContext eine HttpSession zurückliefert. Hier schreibe ich dann mit session.setAttribute meine Werte in die Session.
printSessionInfo zeigt mir diese dann auch an.
Wenn ich aber dann im Client eine 2. Anfrage direkt auf printSessionInfo losschicke, mir wieder die Session hole und die Werte auslese, so ist die SessionId eine komplett andere und natürlich bekomm ich über getAttributes die Werte nicht mehr zurück. Im Gegensatz funktioniert das Ganze für Servlets auf meinem Server wunderbar.
Warum wird die Session nicht wieder aufgegriffen? Wird diese überhaupt gespeichert oder immer überschrieben?
Bitte helft mir weiter...ich verzweifel sonst noch...
Code:
package test;
import java.util.Enumeration;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
@WebService
@SOAPBinding(style = Style.RPC)
public class Login {
@Resource
private WebServiceContext wsContext;
@WebMethod
public String login(String user, String passwd) {
if (loginCheck(user, passwd)) {
HttpSession session = getSession();
session.setAttribute("user", user);
session.setAttribute("passwd", passwd);
printSessionInfo();
return session.getId();
} else {
return "fail";
}
}
@WebMethod
public void logout() {
getSession().invalidate();
}
@WebMethod
public void printSessionInfo() {
HttpSession session = getSession();
System.out.println("** Session with id: " + session.getId());
System.out.println("** new session: " + session.isNew());
System.out.println("** created: " + new java.util.Date(session.getCreationTime()));
System.out.println("** last accessed time: " + new java.util.Date(session.getLastAccessedTime()));
System.out.println("** session attributes: ");
Enumeration enu = session.getAttributeNames();
while (enu.hasMoreElements()) {
String ele = (String) enu.nextElement();
System.out.println("** -" + ele + "->" + session.getAttribute(ele));
}
}
private boolean loginCheck(String user, String passwd) {
return true;
}
private HttpSession getSession() {
MessageContext msgContext = wsContext.getMessageContext();
HttpServletRequest req = (HttpServletRequest) msgContext.get(MessageContext.SERVLET_REQUEST);
return req.getSession();
}
}
Client:
Code:
package de.client;
import de.client.artifacts.*;
public class WSTest {
public static void main(String[] args) {
LoginService service = new LoginService();
Login port = service.getLoginPort();
port.login("hans", "geheim");
port.printSessionInfo();
port.printSessionInfo();
}
}
Ausgabe Konsole:
Code:
** Session with id: 6A8FDD5D60A2AC26A6449862C38602FF
** new session: true
** created: Tue Feb 23 17:14:24 CET 2010
** last accessed time: Tue Feb 23 17:14:24 CET 2010
** session attributes:
** -passwd->geheim
** -user->hans
** Session with id: DEAD71A099115F70F03DDBCE0D41B978
** new session: true
** created: Tue Feb 23 17:14:24 CET 2010
** last accessed time: Tue Feb 23 17:14:24 CET 2010
** session attributes:
** Session with id: 2F6DA496761FC34B6B3693B9FDD41909
** new session: true
** created: Tue Feb 23 17:14:24 CET 2010
** last accessed time: Tue Feb 23 17:14:24 CET 2010
** session attributes: