You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Swagger2页面401未授权问题:已配置认证绕过仍异常

解决Swagger UI绕过认证后仍返回异常的问题

我之前也碰到过一模一样的问题——只放过/swagger-ui.html根本不够!Swagger UI页面可不是只靠这一个HTML文件就能跑起来的,它还依赖一堆静态资源和接口,这些路径如果没一起绕过认证,照样会被拦截,最后页面就会显示异常。

给你梳理几个关键问题和解决办法:

  • 遗漏了Swagger相关的其他资源路径
    你得把Swagger用到的所有路径都加入绕过列表,包括:

    • /swagger-resources/**:Swagger的资源配置接口
    • /v2/api-docs:接口文档的数据源接口
    • /webjars/**:Swagger UI用到的前端静态资源(比如js、css、图标)
  • 修改过滤逻辑,补充路径并提前返回
    把这些路径都加进判断里,还要记得加return,避免绕过之后还执行后续的认证逻辑:

    String resourcePath = new UrlPathHelper().getPathWithinApplication(httpRequest);
    // 匹配所有Swagger相关路径
    if (resourcePath.equalsIgnoreCase("/swagger-ui.html") 
        || resourcePath.startsWith("/swagger-resources")
        || resourcePath.startsWith("/v2/api-docs")
        || resourcePath.startsWith("/webjars")) {
        filterChain.doFilter(request, response);
        return; // 必须加return,终止当前过滤器的后续逻辑
    }
    // 你的其他认证逻辑代码
    
  • 检查过滤器执行顺序
    如果你的认证过滤器优先级太高,在Spring MVC的资源处理过滤器之前执行,也会导致资源加载失败。可以给你的认证过滤器加上@Order注解,设置一个较高的数值(比如@Order(100)),让它在资源处理过滤器之后运行。

  • 验证路径匹配的准确性
    调试时可以把resourcePath打印出来,看看实际请求的路径是不是和你判断的一致。比如如果项目有上下文路径(比如/my-project),那实际路径会是/my-project/swagger-ui.html,这时候你的判断就会失效。这种情况可以用request.getRequestURI()获取完整路径,或者先去掉上下文路径再做匹配。

按照上面的方法调整后,应该就能正常打开Swagger UI页面了。

内容的提问来源于stack exchange,提问作者Laodao

火山引擎 最新活动