You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义JWT装饰器@tokenreq保护Flasgger的/apidocs路由?

可以用@tokenreq装饰器保护/apidocs路由,以下是两种可行实现方式:

方法一:精准保护/apidocs单一路由

这种方式仅给/apidocs页面添加权限验证,不影响Swagger的其他接口(比如/swagger.json):

from flask import Flask, jsonify
from flasgger import Swagger
# 导入你自定义的tokenreq装饰器
from your_decorator_module import tokenreq

app = Flask(__name__)
# 初始化Flasgger
swagger = Swagger(app)

# 获取Flasgger默认注册的/apidocs视图函数
apidocs_view = app.view_functions.get('flasgger.apidocs')

if apidocs_view:
    # 移除原有路由规则
    for rule in list(app.url_map.iter_rules()):
        if rule.endpoint == 'flasgger.apidocs':
            app.url_map._rules.remove(rule)
            break
    # 删除原有视图函数映射
    del app.view_functions['flasgger.apidocs']

# 重新注册带token验证的/apidocs路由
@app.route('/apidocs', methods=['GET'])
@tokenreq
def protected_apidocs():
    return apidocs_view()

方法二:给所有Flasgger路由添加验证

如果希望Swagger的所有相关接口(包括/swagger.json、/apidocs等)都需要JWT验证,可在初始化Flasgger时直接传入装饰器列表:

from flask import Flask
from flasgger import Swagger
from your_decorator_module import tokenreq

app = Flask(__name__)
# 初始化时给Flasgger所有路由添加tokenreq装饰器
swagger = Swagger(app, decorators=[tokenreq])

注意事项

  • 方法二会导致Swagger UI加载文档时也需要携带有效JWT,否则无法获取/swagger.json导致页面加载失败,适合完全封闭的内部文档场景。
  • 确保你的@tokenreq装饰器能正确处理未携带有效token的请求,返回标准的401 Unauthorized响应,避免Swagger UI出现异常。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:56:10