diff --git a/AuthMiddleware.java b/AuthMiddleware.java new file mode 100644 index 0000000..d208024 --- /dev/null +++ b/AuthMiddleware.java @@ -0,0 +1,27 @@ +package middleware; + +/** + * 认证中间件装饰器 + * 具体装饰器类,用于验证请求的认证信息 + */ +public class AuthMiddleware extends MiddlewareDecorator { + + public AuthMiddleware(HttpRequestHandler decoratedHandler) { + super(decoratedHandler); + } + + @Override + public HttpResponse handle(HttpRequest request) { + // 简单的认证检查逻辑 + String authHeader = request.getHeaders(); + if (authHeader != null && authHeader.contains("Authorization: Bearer token123")) { + System.out.println("Authentication successful"); + return super.handle(request); + } else { + HttpResponse response = new HttpResponse(); + response.setStatusCode(401); + response.setBody("Unauthorized"); + return response; + } + } +} \ No newline at end of file diff --git a/BasicHttpRequestHandler.java b/BasicHttpRequestHandler.java new file mode 100644 index 0000000..fff64ba --- /dev/null +++ b/BasicHttpRequestHandler.java @@ -0,0 +1,15 @@ +package middleware; + +/** + * 基本的HTTP请求处理器实现 + * 装饰器模式中的具体组件类 + */ +public class BasicHttpRequestHandler implements HttpRequestHandler { + @Override + public HttpResponse handle(HttpRequest request) { + HttpResponse response = new HttpResponse(); + response.setBody("Hello from Basic Handler: " + request.getPath()); + response.setHeaders("Content-Type: text/plain"); + return response; + } +} \ No newline at end of file diff --git a/CORSMiddleware.java b/CORSMiddleware.java new file mode 100644 index 0000000..79a1e20 --- /dev/null +++ b/CORSMiddleware.java @@ -0,0 +1,23 @@ +package middleware; + +/** + * CORS中间件装饰器 + * 具体装饰器类,用于处理跨域资源共享请求 + */ +public class CORSMiddleware extends MiddlewareDecorator { + + public CORSMiddleware(HttpRequestHandler decoratedHandler) { + super(decoratedHandler); + } + + @Override + public HttpResponse handle(HttpRequest request) { + HttpResponse response = super.handle(request); + + // 添加CORS头信息 + String existingHeaders = response.getHeaders() != null ? response.getHeaders() + "\n" : ""; + response.setHeaders(existingHeaders + "Access-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE\nAccess-Control-Allow-Headers: *"); + + return response; + } +} \ No newline at end of file diff --git a/HttpRequest.java b/HttpRequest.java new file mode 100644 index 0000000..f580a5d --- /dev/null +++ b/HttpRequest.java @@ -0,0 +1,40 @@ +package middleware; + +/** + * HTTP请求对象 + */ +public class HttpRequest { + private String path; + private String method; + private String headers; + private String body; + + public HttpRequest(String path, String method) { + this.path = path; + this.method = method; + } + + public String getPath() { + return path; + } + + public String getMethod() { + return method; + } + + public void setHeaders(String headers) { + this.headers = headers; + } + + public String getHeaders() { + return headers; + } + + public void setBody(String body) { + this.body = body; + } + + public String getBody() { + return body; + } +} \ No newline at end of file diff --git a/HttpRequestHandler.java b/HttpRequestHandler.java new file mode 100644 index 0000000..c8ae0df --- /dev/null +++ b/HttpRequestHandler.java @@ -0,0 +1,14 @@ +package middleware; + +/** + * HTTP请求处理器接口 + * 装饰器模式的核心组件,定义了处理HTTP请求的方法 + */ +public interface HttpRequestHandler { + /** + * 处理HTTP请求并返回响应 + * @param request HTTP请求对象 + * @return HTTP响应对象 + */ + HttpResponse handle(HttpRequest request); +} \ No newline at end of file diff --git a/HttpResponse.java b/HttpResponse.java new file mode 100644 index 0000000..ec671d0 --- /dev/null +++ b/HttpResponse.java @@ -0,0 +1,38 @@ +package middleware; + +/** + * HTTP响应对象 + */ +public class HttpResponse { + private int statusCode; + private String headers; + private String body; + + public HttpResponse() { + this.statusCode = 200; + } + + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + public void setHeaders(String headers) { + this.headers = headers; + } + + public String getHeaders() { + return headers; + } + + public void setBody(String body) { + this.body = body; + } + + public String getBody() { + return body; + } +} \ No newline at end of file diff --git a/LoggingMiddleware.java b/LoggingMiddleware.java new file mode 100644 index 0000000..d1dd83a --- /dev/null +++ b/LoggingMiddleware.java @@ -0,0 +1,20 @@ +package middleware; + +/** + * 日志中间件装饰器 + * 具体装饰器类,用于记录请求信息 + */ +public class LoggingMiddleware extends MiddlewareDecorator { + + public LoggingMiddleware(HttpRequestHandler decoratedHandler) { + super(decoratedHandler); + } + + @Override + public HttpResponse handle(HttpRequest request) { + System.out.println("Logging request: " + request.getMethod() + " " + request.getPath()); + HttpResponse response = super.handle(request); + System.out.println("Logging response status: " + response.getStatusCode()); + return response; + } +} \ No newline at end of file diff --git a/MiddlewareDecorator.java b/MiddlewareDecorator.java new file mode 100644 index 0000000..af484bf --- /dev/null +++ b/MiddlewareDecorator.java @@ -0,0 +1,18 @@ +package middleware; + +/** + * 中间件装饰器抽象类 + * 装饰器模式中的装饰器类,实现了HttpRequestHandler接口并持有一个HttpRequestHandler引用 + */ +public abstract class MiddlewareDecorator implements HttpRequestHandler { + protected HttpRequestHandler decoratedHandler; + + public MiddlewareDecorator(HttpRequestHandler decoratedHandler) { + this.decoratedHandler = decoratedHandler; + } + + @Override + public HttpResponse handle(HttpRequest request) { + return decoratedHandler.handle(request); + } +} \ No newline at end of file