All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.datakernel.http.session.SessionServlet Maven / Gradle / Ivy

package io.datakernel.http.session;

import io.datakernel.async.Promise;
import io.datakernel.exception.UncheckedException;
import io.datakernel.http.AsyncServlet;
import io.datakernel.http.HttpRequest;
import io.datakernel.http.HttpResponse;
import org.jetbrains.annotations.NotNull;

import java.util.function.Function;

/**
 * This is a simple abstract reference implementation of a concept known as HTTP sessions.
 * It operates over some session storage, session ids that are somehow (usually through cookies)
 * encoded in the requests and two other servlets one for when the session object is present
 * and one when its not - the latter one usually redirects to the main or login pages or something.
 * 

* The session object is {@link HttpRequest#attach attached} to the request so that the first servlet * could then receive and use it. */ public final class SessionServlet implements AsyncServlet { private final SessionStore store; private final Function sessionIdExtractor; private final AsyncServlet publicServlet; private final AsyncServlet privateServlet; private SessionServlet(SessionStore store, Function sessionIdExtractor, AsyncServlet publicServlet, AsyncServlet privateServlet) { this.store = store; this.sessionIdExtractor = sessionIdExtractor; this.publicServlet = publicServlet; this.privateServlet = privateServlet; } public static SessionServlet create(SessionStore store, String sessionIdCookie, AsyncServlet publicServlet, AsyncServlet privateServlet) { return new SessionServlet<>(store, request -> request.getCookie(sessionIdCookie), publicServlet, privateServlet); } public static SessionServlet create(SessionStore store, Function sessionIdExtractor, AsyncServlet publicServlet, AsyncServlet privateServlet) { return new SessionServlet<>(store, sessionIdExtractor, publicServlet, privateServlet); } @Override public @NotNull Promise serve(@NotNull HttpRequest request) throws UncheckedException { String id = sessionIdExtractor.apply(request); if (id == null) { return publicServlet.serve(request); } return store.get(id) .then(sessionObject -> { if (sessionObject != null) { request.attach(sessionObject); return privateServlet.serve(request); } else { return publicServlet.serve(request); } }); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy