From 96bb3072b02e9e8eaaec37e10db578552fcfb2c2 Mon Sep 17 00:00:00 2001 From: Benjamin Erb Date: Tue, 21 Dec 2010 13:13:09 +0100 Subject: [PATCH] added Basic Authentication --- .../www/server/impl/BasicAuthHttpWorker.java | 64 +++++++++++++++++++ .../www/server/impl/BasicHttpServer.java | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/de/ioexception/www/server/impl/BasicAuthHttpWorker.java diff --git a/src/de/ioexception/www/server/impl/BasicAuthHttpWorker.java b/src/de/ioexception/www/server/impl/BasicAuthHttpWorker.java new file mode 100644 index 0000000..2d2c110 --- /dev/null +++ b/src/de/ioexception/www/server/impl/BasicAuthHttpWorker.java @@ -0,0 +1,64 @@ +package de.ioexception.www.server.impl; + +import java.net.Socket; +import java.util.HashMap; +import java.util.Map; + +import util.Base64; +import de.ioexception.www.http.HttpRequest; +import de.ioexception.www.http.HttpResponse; +import de.ioexception.www.http.HttpStatusCode; +import de.ioexception.www.http.HttpVersion; +import de.ioexception.www.http.impl.BasicHttpResponse; + +/** + * @author Benjamin Erb + * + */ +public class BasicAuthHttpWorker extends BasicHttpWorker +{ + private static final Map authentications; + private static final String realm = "Protected Area"; + + static + { + authentications = new HashMap(); + authentications.put("test", "secret"); + authentications.put("user", "1234"); + }; + + public BasicAuthHttpWorker(Socket socket, BasicHttpServer server) + { + super(socket, server); + } + + @Override + protected HttpResponse handleRequest(HttpRequest request) + { + if (request.getHeaders().containsKey("Authorization")) + { + String authValue = request.getHeaders().get("Authorization"); + String[] authValues = authValue.split(" ", 2); + String type = authValues[0]; + String values = authValues[1]; + if (type.equalsIgnoreCase("Basic")) + { + String auth = new String(Base64.decode(values)); + String[] authentication = auth.split(":", 2); + if (authentications.containsKey(authentication[0]) && authentications.get(authentication[0]).equals(authentication[1])) + { + return super.handleRequest(request); + } + } + } + BasicHttpResponse response = new BasicHttpResponse(); + response.setStatusCode(HttpStatusCode.UNAUTHORIZED); + Map headers = new HashMap(); + headers.put("WWW-Authenticate", "Basic realm=\"" + realm + "\""); + headers.put("Content-Length", "0"); + response.setVersion(HttpVersion.VERSION_1_1); + response.setHeaders(headers); + response.setEntity(null); + return response; + } +} \ No newline at end of file diff --git a/src/de/ioexception/www/server/impl/BasicHttpServer.java b/src/de/ioexception/www/server/impl/BasicHttpServer.java index ddca550..eb69e47 100644 --- a/src/de/ioexception/www/server/impl/BasicHttpServer.java +++ b/src/de/ioexception/www/server/impl/BasicHttpServer.java @@ -62,7 +62,7 @@ public BasicHttpServer(int port) @Override public void dispatchRequest(Socket socket) { - workerPool.submit(new BasicHttpWorker(socket, this)); + workerPool.submit(new BasicAuthHttpWorker(socket, this)); } @Override