Akka HTTP新增Basic认证后delete接口返回405方法不支持问题排查
问题诱因
seal是 Akka HTTP 中用于将路由封装为完整独立分支的指令,它会为被包裹的路由自动注入默认的404、405等标准化错误处理逻辑。一旦进入seal包裹的路由分支且没有匹配到对应请求,就会直接返回错误响应,不会继续向后传递请求匹配concat中的后续分支。- 你的代码中给每个独立的子路由都单独包裹了
seal,DELETE请求进入后,先匹配第一个get路由失败,随后进入第二个seal包裹的子路由,该子路由内仅定义了PUT相关接口,没有匹配到DELETE方法,就直接返回了405错误,根本没有进入你写的DELETE接口所在的第三个seal分支。 - 报错中提示的支持方法为PUT,正是第二个
seal包裹的子路由中支持的HTTP方法。
修复方案
不要给每个子路由单独添加seal包裹,seal仅需要作用在最外层的整个路由结构上,保证所有路由分支都匹配失败时,再返回统一的标准化错误即可,参考结构如下:
seal( concat( get { // 原有正常工作的get逻辑 }, // 原有正常工作的其他路由逻辑 authenticateBasic( realm = "Secure foo", scopeAuthenticator ) { scopes => delete { handleErrorsAndReport("delete_foo") { fooRepository.deleteFoo(fooId, scopes) complete(NoContent) } } } ) )
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

