.NET Core中如何判断请求是否来自Swagger UI
判断请求是否来自Swagger UI的几种实用方案
1. 检查请求的Referer/Origin头
Swagger UI发起请求时,请求头里的Referer会指向Swagger UI的页面地址(比如你的域名下的/swagger-ui.html或/swagger/index.html)。服务端可以通过校验这个字段判断来源:
Java Spring Boot 示例:
@GetMapping("/your-api") public ResponseEntity<?> yourApi(HttpServletRequest request) { String referer = request.getHeader("Referer"); boolean isFromSwagger = referer != null && referer.contains("/swagger-ui/"); // 根据你的Swagger路径调整 if (isFromSwagger) { // 处理Swagger来源的请求 } else { // 处理其他客户端的请求 } // ... }
Node.js Express 示例:
app.get('/your-api', (req, res) => { const referer = req.get('Referer'); const isFromSwagger = referer && referer.includes('/swagger-ui/'); if (isFromSwagger) { // Swagger请求逻辑 } else { // 其他客户端逻辑 } });
2. 校验User-Agent头
Swagger UI的请求User-Agent通常包含Swagger UI标识,可作为辅助判断(注意:这个字段可能被伪造,仅作补充校验):
String userAgent = request.getHeader("User-Agent"); boolean isFromSwagger = userAgent != null && userAgent.contains("Swagger UI");
3. 给Swagger UI添加自定义请求头(最可靠方案)
通过配置Swagger,让所有从Swagger UI发起的请求自动携带一个自定义标识头,比如X-From-Swagger: true,服务端直接校验这个头即可:
Spring Boot Swagger 3.x 配置示例:
@Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .globalRequestParameters(Arrays.asList( new RequestParameterBuilder() .name("X-From-Swagger") .description("标识请求来自Swagger UI") .in(ParameterType.HEADER) .required(false) .model(new ModelBuilder().build()) .defaultValue("true") .build() )) // 其他Swagger配置... .select() .apis(RequestHandlerSelectors.basePackage("com.your.package")) .paths(PathSelectors.any()) .build(); } }
服务端校验:
String swaggerFlag = request.getHeader("X-From-Swagger"); boolean isFromSwagger = "true".equals(swaggerFlag);
内容的提问来源于stack exchange,提问作者Hậu tran
相关产品推荐
相关产品推荐

