mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-14 10:58:42 +00:00
56dfd8c2d7
* fix server session * fix version
62 lines
1.7 KiB
Java
62 lines
1.7 KiB
Java
package com.iluwatar.sessionserver;
|
|
|
|
import com.sun.net.httpserver.HttpExchange;
|
|
import com.sun.net.httpserver.HttpHandler;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.time.Instant;
|
|
import java.util.Map;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
/**
|
|
* LogoutHandler.
|
|
*/
|
|
@Slf4j
|
|
public class LogoutHandler implements HttpHandler {
|
|
|
|
private Map<String, Integer> sessions;
|
|
private Map<String, Instant> sessionCreationTimes;
|
|
|
|
public LogoutHandler(Map<String, Integer> sessions, Map<String, Instant> sessionCreationTimes) {
|
|
this.sessions = sessions;
|
|
this.sessionCreationTimes = sessionCreationTimes;
|
|
}
|
|
|
|
@Override
|
|
public void handle(HttpExchange exchange) {
|
|
// Get session ID from cookie
|
|
String sessionId = exchange.getRequestHeaders().getFirst("Cookie").replace("sessionID=", "");
|
|
String currentSessionId = sessions.get(sessionId) == null ? null : sessionId;
|
|
|
|
// Send response
|
|
|
|
String response = "";
|
|
if (currentSessionId == null) {
|
|
response += "Session has already expired!";
|
|
} else {
|
|
response = "Logout successful!\n" + "Session ID: " + currentSessionId;
|
|
}
|
|
|
|
//Remove session
|
|
if (currentSessionId != null) {
|
|
LOGGER.info("User " + sessions.get(currentSessionId) + " deleted!");
|
|
} else {
|
|
LOGGER.info("User already deleted!");
|
|
}
|
|
sessions.remove(sessionId);
|
|
sessionCreationTimes.remove(sessionId);
|
|
|
|
try {
|
|
exchange.sendResponseHeaders(200, response.length());
|
|
} catch (IOException e) {
|
|
LOGGER.error("An error has occurred: ", e);
|
|
}
|
|
|
|
try (OutputStream os = exchange.getResponseBody()) {
|
|
os.write(response.getBytes());
|
|
} catch (IOException e) {
|
|
LOGGER.error("An error has occurred: ", e);
|
|
}
|
|
}
|
|
}
|