Hallo zusammen
Ich schreibe aktuell einen Webservice welcher später für andere Applikationen eingesetzt wird.
Als Framework wird Spring verwendet und beim Webservice handelt es sich um eine Springboot Applikation. Nun...
Sobald sich der Benutzer auf eine Applikation einloggt welche mit dem Webservice kommuniziert, sollte es für den Benutzer eine Session auf dem Webservice starten.
Nun besteht folgendes Problem:
Beim erstellen von der Session funktioniert alles und die Session ist gesetzt, jedoch wird bei einem zweiten Request von diesem Benutzer, ein NULL zurück gegeben so als ob diese Session gar nicht vorhanden wäre... Wehslab? Was habe ich nicht beachtet? PS. ich arbeite nicht mit dem Redis.
der zweite block wird nach dem login ausgeführt...
Danke schon mal für die hilfe
Ich schreibe aktuell einen Webservice welcher später für andere Applikationen eingesetzt wird.
Als Framework wird Spring verwendet und beim Webservice handelt es sich um eine Springboot Applikation. Nun...
Sobald sich der Benutzer auf eine Applikation einloggt welche mit dem Webservice kommuniziert, sollte es für den Benutzer eine Session auf dem Webservice starten.
Nun besteht folgendes Problem:
Beim erstellen von der Session funktioniert alles und die Session ist gesetzt, jedoch wird bei einem zweiten Request von diesem Benutzer, ein NULL zurück gegeben so als ob diese Session gar nicht vorhanden wäre... Wehslab? Was habe ich nicht beachtet? PS. ich arbeite nicht mit dem Redis.
Java:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam("email") String email, @RequestParam("password") String password, HttpServletRequest request) {
String resultString = "{\"error\":\"true\",\"intend\":\"login\"}";
if(authValidator.checkEmail(email) && authValidator.checkPassword(password)){
resultString = userHandler.login(email, password).toString();
gson = new Gson();
User user = gson.fromJson(resultString, User.class);
if (!user.isError() && "1".equals(user.getAgb())) {
String token = UUID.randomUUID().toString(); // token wird benötigt für doppelte Logins
System.out.println(sessionHandlerImpl.existSessionWithToken(request, user.getUid(), token)); // gibt TRUE zurück
resultString = sessionHandlerImpl.getStoredProfile(request, user.getUid()); // gibt auch den richtigen String zurück
}
}
return resultString;
}
Java:
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getUserPage(ModelMap model, HttpServletRequest request, HttpServletResponse response) {
String myUid = request.getParameter("userId");
String suid = isNotEmpty(request.getParameter("sUid")) ? request.getParameter("sUid") : myUid;
String token = request.getParameter("token");
String resultProfile = "{\"error\":true,\"username\":\"\",\"name\":\"\",\"description\":\"\",\"profilepicture\":\"\",\"following\":\"\",\"intend\":\"get user page\"}";
sessionHandlerImpl.existSessionWithToken(request, myUid, token); // gibt FALSE zurück
if (sessionHandlerImpl.existSessionWithToken(request, myUid, token)) {
if (isNotEmpty(myUid)){
if (authValidator.checkUserId(myUid)) {
if (sessionHandlerImpl.existSession(request, suid)) {
resultProfile = sessionHandlerImpl.getStoredProfile(request, suid);
} else if (myUid.equals(suid)) {
resultProfile = userHandler.getMyUserPage(myUid);
} else if (authValidator.checkUserId(suid)) {
resultProfile = userHandler.getUserPage(myUid, suid);
}
}
}
} else {
response.setStatus(403);
}
return resultProfile;
}
der zweite block wird nach dem login ausgeführt...
Java:
public void createSession(HttpServletRequest request, String token, String jsonUserObj) {
gson = new Gson();
User user = gson.fromJson(jsonUserObj, User.class);
user.setToken(token);
request.getSession().setAttribute(user.getUid(), user);
}
public boolean existSessionWithToken(HttpServletRequest request, String userId, String token) {
try {
User user = (User) request.getSession(false).getAttribute(userId);
return user.getToken().equals(token);
} catch(NullPointerException e) {
return false;
}
}
Danke schon mal für die hilfe