@@ -161,7 +161,7 @@ public class HttpServletSseServerTransportProvider extends HttpServlet implement
161161 /**
162162 * Security validator for validating HTTP requests.
163163 */
164- private final ServerTransportSecurityValidator securityValidator ;
164+ private final ServerHttpHeaderValidator httpHeaderValidator ;
165165
166166 /**
167167 * Creates a new HttpServletSseServerTransportProvider instance with a custom SSE
@@ -174,28 +174,28 @@ public class HttpServletSseServerTransportProvider extends HttpServlet implement
174174 * @param keepAliveInterval The interval for keep-alive pings, or null to disable
175175 * keep-alive functionality
176176 * @param contextExtractor The extractor for transport context from the request.
177- * @param securityValidator The security validator for validating HTTP requests.
177+ * @param httpHeaderValidator The HTTP header validator for validating HTTP requests.
178178 * @param requestMaxSize The maximum size, in bytes, of a single request body. Must be
179179 * positive.
180180 */
181181 private HttpServletSseServerTransportProvider (McpJsonMapper jsonMapper , String baseUrl , String messageEndpoint ,
182182 String sseEndpoint , Duration keepAliveInterval ,
183183 McpTransportContextExtractor <HttpServletRequest > contextExtractor ,
184- ServerTransportSecurityValidator securityValidator , int requestMaxSize ) {
184+ ServerHttpHeaderValidator httpHeaderValidator , int requestMaxSize ) {
185185
186186 Assert .notNull (jsonMapper , "JsonMapper must not be null" );
187187 Assert .notNull (messageEndpoint , "messageEndpoint must not be null" );
188188 Assert .notNull (sseEndpoint , "sseEndpoint must not be null" );
189189 Assert .notNull (contextExtractor , "Context extractor must not be null" );
190- Assert .notNull (securityValidator , "Security validator must not be null" );
190+ Assert .notNull (httpHeaderValidator , "HTTP header validator must not be null" );
191191 Assert .isTrue (requestMaxSize > 0 , "requestMaxSize must be positive" );
192192
193193 this .jsonMapper = jsonMapper ;
194194 this .baseUrl = baseUrl ;
195195 this .messageEndpoint = messageEndpoint ;
196196 this .sseEndpoint = sseEndpoint ;
197197 this .contextExtractor = contextExtractor ;
198- this .securityValidator = securityValidator ;
198+ this .httpHeaderValidator = httpHeaderValidator ;
199199 this .requestMaxSize = requestMaxSize ;
200200
201201 if (keepAliveInterval != null ) {
@@ -293,8 +293,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
293293 }
294294
295295 try {
296- Map <String , List <String >> headers = HttpServletRequestUtils .extractHeaders (request );
297- this .securityValidator .validateHeaders (headers );
296+ this .httpHeaderValidator .validate (new HttpServletHeaderAccessor (request ));
298297 }
299298 catch (ServerTransportSecurityException e ) {
300299 response .sendError (e .getStatusCode (), e .getMessage ());
@@ -371,8 +370,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
371370 }
372371
373372 try {
374- Map <String , List <String >> headers = HttpServletRequestUtils .extractHeaders (request );
375- this .securityValidator .validateHeaders (headers );
373+ this .httpHeaderValidator .validate (new HttpServletHeaderAccessor (request ));
376374 }
377375 catch (ServerTransportSecurityException e ) {
378376 response .sendError (e .getStatusCode (), e .getMessage ());
@@ -619,7 +617,7 @@ public static class Builder {
619617
620618 private Duration keepAliveInterval ;
621619
622- private ServerTransportSecurityValidator securityValidator = ServerTransportSecurityValidator .NOOP ;
620+ private ServerHttpHeaderValidator httpHeaderValidator = ServerHttpHeaderValidator .NOOP ;
623621
624622 private int requestMaxSize = DEFAULT_REQUEST_MAX_SIZE ;
625623
@@ -702,10 +700,25 @@ public Builder keepAliveInterval(Duration keepAliveInterval) {
702700 * @param securityValidator The security validator to use. Must not be null.
703701 * @return This builder instance
704702 * @throws IllegalArgumentException if securityValidator is null
703+ * @deprecated Use {@link #httpHeaderValidator(ServerHttpHeaderValidator)}
704+ * instead.
705705 */
706+ @ Deprecated
706707 public Builder securityValidator (ServerTransportSecurityValidator securityValidator ) {
707708 Assert .notNull (securityValidator , "Security validator must not be null" );
708- this .securityValidator = securityValidator ;
709+ this .httpHeaderValidator = ServerTransportSecurityValidator .toHttpHeaderValidator (securityValidator );
710+ return this ;
711+ }
712+
713+ /**
714+ * Sets the HTTP header validator for validating HTTP requests.
715+ * @param httpHeaderValidator The HTTP header validator to use. Must not be null.
716+ * @return This builder instance
717+ * @throws IllegalArgumentException if httpHeaderValidator is null
718+ */
719+ public Builder httpHeaderValidator (ServerHttpHeaderValidator httpHeaderValidator ) {
720+ Assert .notNull (httpHeaderValidator , "HTTP header validator must not be null" );
721+ this .httpHeaderValidator = httpHeaderValidator ;
709722 return this ;
710723 }
711724
@@ -734,7 +747,7 @@ public HttpServletSseServerTransportProvider build() {
734747 }
735748 return new HttpServletSseServerTransportProvider (
736749 jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper , baseUrl , messageEndpoint ,
737- sseEndpoint , keepAliveInterval , contextExtractor , securityValidator , requestMaxSize );
750+ sseEndpoint , keepAliveInterval , contextExtractor , httpHeaderValidator , requestMaxSize );
738751 }
739752
740753 }
0 commit comments