Rocket框架基于请求头的全局身份认证/授权实现问题咨询
Rocket 全局身份校验实现方案
方案一:Fairing + 全局强制Request Guard(官方推荐)
这种方案完全贴合Rocket的设计逻辑,既实现了全局统一校验,也避免了单个处理函数漏加参数的风险:
- 首先定义用于存储校验结果的请求扩展类型,比如
AuthResult,可设置三种状态:校验通过、token无效、未携带token - 实现Fairing的
on_request回调,在该回调中完成token的提取、校验逻辑,将最终结果写入请求的本地缓存中 - 给
AuthResult实现Request Guard trait,该Guard的校验逻辑仅读取请求本地缓存的校验结果,若校验失败直接返回401错误响应 - 将该Guard注册为所有路由的全局前置守卫,无需为每个处理函数单独添加参数,Rocket会自动对所有请求执行该Guard校验
方案二:Fairing on_response 回调直接返回错误
如果不想额外实现Request Guard,也可以通过响应回调直接修改返回结果:
- 在
on_request回调中完成token校验,将结果存入请求本地缓存 - 实现
on_response回调,读取缓存的校验结果,若token无效,直接将原有响应替换为自定义的401错误响应即可 - 注意提前配置白名单,跳过登录、公开接口等无需身份校验的路由
注意事项
如果校验逻辑需要读取请求体内容,调用Data::peek()仅会读取指定长度的请求前缀,不会消耗完整请求体,不影响后续处理函数读取完整数据。
内容的提问来源于stack exchange,提问作者at54321
相关产品推荐
相关产品推荐

