From 3063c8d06a82258acddbd2c1f052b23037722e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BD=A4?= <2434830800@qq.com> Date: Sat, 1 Nov 2025 19:31:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=9E=8B=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AuthMiddleware.java | 27 ++++++++++++++++++++++++ BasicHttpRequestHandler.java | 15 ++++++++++++++ CORSMiddleware.java | 23 +++++++++++++++++++++ HttpRequest.java | 40 ++++++++++++++++++++++++++++++++++++ HttpRequestHandler.java | 14 +++++++++++++ HttpResponse.java | 38 ++++++++++++++++++++++++++++++++++ LoggingMiddleware.java | 20 ++++++++++++++++++ MiddlewareDecorator.java | 18 ++++++++++++++++ 8 files changed, 195 insertions(+) create mode 100644 AuthMiddleware.java create mode 100644 BasicHttpRequestHandler.java create mode 100644 CORSMiddleware.java create mode 100644 HttpRequest.java create mode 100644 HttpRequestHandler.java create mode 100644 HttpResponse.java create mode 100644 LoggingMiddleware.java create mode 100644 MiddlewareDecorator.java 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