import {Injectable} from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor,
HttpResponse
} from '@angular/common/http';
import {Observable, tap} from 'rxjs';
import {StorageKey} from "../../domain/constant";
import {AppStorage} from "../storage/app-storage";
@Injectable()
export class HttpHeaderInterceptor implements HttpInterceptor {
constructor(private appStorage: AppStorage) {
}
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
tap((response) => {
if (response instanceof HttpResponse) {
const tModel = response.headers?.get('T-model');
if (tModel === 'Y') {
this.appStorage.storeSessionStorageKeyAndValue(StorageKey.Token, '');
} else {
const xToken = response.headers?.get('X-Token');
if (xToken) {
this.appStorage.storeSessionStorageKeyAndValue(StorageKey.Token, xToken);
}
}
}
})
);
}
}
@Injectable() angular服务注解
@NgModule({
declarations: [
],
imports: [
],
providers: [
{provide: HTTP_INTERCEPTORS, useClass: HttpHeaderInterceptor, multi: true},
],
entryComponents: [],
bootstrap: [AppComponent]
})
若想要拦截器生效,还需再app.module.ts中引入,