You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trae1/ChallengeMiddlewarePipeline...

111 lines
3.0 KiB

import java.util.ArrayList;
import java.util.List;
// 请求处理接口
interface HttpRequestHandler {
void handle(HttpRequest request);
}
// 基础处理器
class CoreHandler implements HttpRequestHandler {
public void handle(HttpRequest request) {
System.out.println("Core processing: " + request.getPath());
}
}
// 装饰器抽象类
abstract class MiddlewareDecorator implements HttpRequestHandler {
protected HttpRequestHandler nextHandler;
public MiddlewareDecorator(HttpRequestHandler handler) {
this.nextHandler = handler;
}
}
// 具体装饰器实现
class AuthMiddleware extends MiddlewareDecorator {
public AuthMiddleware(HttpRequestHandler handler) {
super(handler);
}
public void handle(HttpRequest request) {
if (!request.getHeaders().containsKey("Authorization")) {
throw new SecurityException("Unauthorized");
}
nextHandler.handle(request);
}
}
class LoggingMiddleware extends MiddlewareDecorator {
public LoggingMiddleware(HttpRequestHandler handler) {
super(handler);
}
public void handle(HttpRequest request) {
System.out.println("Request logged: " + request.getMethod());
nextHandler.handle(request);
}
}
// 请求对象
class HttpRequest {
private String method;
private String path;
private List<String> headers = new ArrayList<>();
public HttpRequest(String method, String path) {
this.method = method;
this.path = path;
}
public void addHeader(String header) {
headers.add(header);
}
// getters...
}
// 管道构建器
class MiddlewarePipeline {
private HttpRequestHandler pipeline;
public void addMiddleware(HttpRequestHandler middleware) {
if (pipeline == null) {
pipeline = middleware;
} else {
// 找到最后一个处理器并添加新装饰器
HttpRequestHandler current = pipeline;
while (current instanceof MiddlewareDecorator) {
MiddlewareDecorator decorator = (MiddlewareDecorator) current;
if (decorator.nextHandler == null) {
decorator.nextHandler = middleware;
break;
}
current = decorator.nextHandler;
}
}
}
public void execute(HttpRequest request) {
if (pipeline != null) {
pipeline.handle(request);
}
}
}
// 客户端使用
public class ChallengeMiddlewarePipeline {
public static void main(String[] args) {
MiddlewarePipeline pipeline = new MiddlewarePipeline();
// 构建处理链(顺序重要)
pipeline.addMiddleware(new LoggingMiddleware(null));
pipeline.addMiddleware(new AuthMiddleware(new CoreHandler()));
// 执行请求
HttpRequest request = new HttpRequest("GET", "/api/data");
request.addHeader("Authorization: Bearer token123");
pipeline.execute(request);
}
}