Skip to content

Commit dbd03c9

Browse files
committed
feat: Wire SecurityFilter into the request-processing chain
1 parent 5b35d8f commit dbd03c9

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

src/main/java/com/retailsvc/http/OpenApiServer.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import com.retailsvc.http.internal.RequestPreparationFilter;
1111
import com.retailsvc.http.internal.ResponseRenderer;
1212
import com.retailsvc.http.internal.Router;
13+
import com.retailsvc.http.internal.SecurityFilter;
1314
import com.retailsvc.http.internal.TextTypeMapper;
15+
import com.retailsvc.http.spec.Operation;
1416
import com.retailsvc.http.spec.Spec;
1517
import com.retailsvc.http.validate.DefaultValidator;
1618
import com.sun.net.httpserver.HttpContext;
@@ -24,6 +26,7 @@
2426
import java.util.Locale;
2527
import java.util.Map;
2628
import java.util.Optional;
29+
import java.util.stream.Collectors;
2730
import org.slf4j.Logger;
2831
import org.slf4j.LoggerFactory;
2932

@@ -49,7 +52,9 @@ record HandlerConfig(
4952
List<RequestInterceptor> interceptors,
5053
List<ResponseDecorator> decorators,
5154
ExceptionHandler exceptionHandler,
52-
Map<String, HttpHandler> extras) {}
55+
Map<String, HttpHandler> extras,
56+
Map<String, SchemeValidator> securityValidators,
57+
boolean externalAuth) {}
5358

5459
OpenApiServer(
5560
Spec spec,
@@ -70,6 +75,9 @@ record HandlerConfig(
7075

7176
long t0 = System.currentTimeMillis();
7277
Router router = new Router(spec.operations());
78+
Map<String, Operation> operationsById =
79+
spec.operations().stream()
80+
.collect(Collectors.toUnmodifiableMap(Operation::operationId, op -> op));
7381
DefaultValidator validator = new DefaultValidator(spec::resolveSchema);
7482

7583
this.httpServer = HttpServer.create(new InetSocketAddress(port), 0);
@@ -78,6 +86,14 @@ record HandlerConfig(
7886
HttpContext ctx = httpServer.createContext(Optional.ofNullable(spec.basePath()).orElse("/"));
7987
ctx.getFilters().add(new ExceptionFilter(exceptionHandler));
8088
ctx.getFilters().add(new RequestPreparationFilter(spec, router, validator, bodyMappers));
89+
ctx.getFilters()
90+
.add(
91+
new SecurityFilter(
92+
operationsById,
93+
spec.securitySchemes(),
94+
spec.security(),
95+
handlerConfig.securityValidators(),
96+
handlerConfig.externalAuth()));
8197
ctx.setHandler(
8298
new DispatchHandler(
8399
handlerConfig.handlers(),
@@ -260,7 +276,14 @@ public OpenApiServer build() throws IOException {
260276
}
261277
Map<String, TypeMapper> resolved = resolveBodyMappers(bodyMappers);
262278
HandlerConfig handlerConfig =
263-
new HandlerConfig(handlers, interceptors, decorators, exceptionHandler, extras);
279+
new HandlerConfig(
280+
handlers,
281+
interceptors,
282+
decorators,
283+
exceptionHandler,
284+
extras,
285+
Map.copyOf(securityValidators),
286+
externalAuth);
264287
return new OpenApiServer(spec, resolved, handlerConfig, port, shutdownTimeoutSeconds);
265288
}
266289

0 commit comments

Comments
 (0)