Angular拦截器未被调用且未纳入部署页面,是否为正常行为?
问题解答
这绝对不是正常行为,Angular的HTTP拦截器必须完成正确的注册配置,才会被打包进部署包并生效。你当前的问题核心是拦截器没有在Angular的依赖注入系统中注册为HTTP拦截器类型,哪怕用了@Injectable({ providedIn: 'root' })也不行——因为拦截器属于多提供者(multi-provider)范畴,需要通过HTTP_INTERCEPTORS令牌专门注册。
修复步骤
- 打开你的根模块文件(通常是
app.module.ts),导入必要的依赖:
import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { BasicAuthenticationHtppInterceptorService } from './path-to-your-interceptor-file'; // 替换成你拦截器文件的实际路径
- 在模块的
providers数组中添加拦截器的注册配置:
@NgModule({ // ...其他模块配置(declarations、imports等) providers: [ { provide: HTTP_INTERCEPTORS, useClass: BasicAuthenticationHtppInterceptorService, multi: true // 必须设置为true,允许同时注册多个HTTP拦截器 } ] }) export class AppModule { }
额外代码修正提示
你的拦截器里Authorization头的处理有个小问题:
- Basic Authentication的头格式应为
Basic [base64编码的username:password] - 你现在用
JSON.stringify(sessionStorage.getItem('token'))会给token套上额外的双引号,导致认证失败。如果你的token已经是带Basic前缀的正确格式,直接写成:
Authorization: sessionStorage.getItem('token')
内容的提问来源于stack exchange,提问作者MAMMIA
相关产品推荐
相关产品推荐

