1010import com .retailsvc .http .internal .RequestPreparationFilter ;
1111import com .retailsvc .http .internal .ResponseRenderer ;
1212import com .retailsvc .http .internal .Router ;
13+ import com .retailsvc .http .internal .SecurityFilter ;
1314import com .retailsvc .http .internal .TextTypeMapper ;
15+ import com .retailsvc .http .spec .Operation ;
1416import com .retailsvc .http .spec .Spec ;
1517import com .retailsvc .http .validate .DefaultValidator ;
1618import com .sun .net .httpserver .HttpContext ;
2426import java .util .Locale ;
2527import java .util .Map ;
2628import java .util .Optional ;
29+ import java .util .stream .Collectors ;
2730import org .slf4j .Logger ;
2831import 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