Skip to content

Instantly share code, notes, and snippets.

@eduard-vasinskyi
Created August 4, 2020 14:40
Show Gist options
  • Save eduard-vasinskyi/d0073ccca5ce5275ec11eb34605ac788 to your computer and use it in GitHub Desktop.
Save eduard-vasinskyi/d0073ccca5ce5275ec11eb34605ac788 to your computer and use it in GitHub Desktop.
An example of dynamic routing based on cookies
package io.activej.launchers.http;
import io.activej.http.AsyncServlet;
import io.activej.http.HttpResponse;
import io.activej.http.RoutingServlet;
import io.activej.inject.annotation.Named;
import io.activej.inject.annotation.Provides;
public final class CookieRoutingExample extends HttpServerLauncher {
private static final String COOKIE = "SERVLET_NUMBER";
@Provides
AsyncServlet mainServlet(@Named("First") AsyncServlet firstServlet, @Named("Second") AsyncServlet secondServlet) {
return RoutingServlet.create()
.map("/*", request -> {
String servletNumberCookier = request.getCookie(COOKIE);
if (servletNumberCookier == null) {
return HttpResponse.ofCode(400).withPlainText("Cookie '" + COOKIE + "' is missing");
}
if ("1".equals(servletNumberCookier)) {
return firstServlet.serve(request);
} else if ("2".equals(servletNumberCookier)) {
return secondServlet.serve(request);
} else {
return HttpResponse.ofCode(400).withPlainText("Unknown servlet number");
}
});
}
@Provides
@Named("First")
AsyncServlet firstServlet() {
return request -> HttpResponse.ok200().withHtml("<h1>This is servlet #1</h1>");
}
@Provides
@Named("Second")
AsyncServlet secondServlet() {
return request -> HttpResponse.ok200().withHtml("<h1>This is servlet #2</h1>");
}
public static void main(String[] args) throws Exception {
new CookieRoutingExample().launch(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment