中化加油站项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

121 lines
3.7 KiB

import { Injectable } from "@angular/core";
import {
HttpClient,
HttpInterceptor,
HttpHandler,
HttpRequest,
HttpErrorResponse,
HttpResponse,
} from "@angular/common/http";
import { throwError } from "rxjs";
import { catchError, tap, finalize } from "rxjs/operators";
import { Router } from "@angular/router";
import { NzMessageService } from "ng-zorro-antd/message";
//baseurl
// const baseurl = 'http://39.106.78.171:8008';
@Injectable()
export class BaseInterceptor implements HttpInterceptor {
constructor(private router: Router, private message: NzMessageService) {}
intercept(req, next: HttpHandler) {
// req.url = "/youzhan" + req.url;
// req.urlWithParams = "/youzhan" + req.urlWithParams;
let params = req.params;
for (const key of req.params.keys()) {
if (params.get(key) === undefined || params.get(key) === null) {
params = params.delete(key, undefined);
}
}
req = req.clone({ params });
// debugger
// console.log('xxxxxx',req)
let newReq = req.clone({
url: req.hadBaseurl ? `${req.url}` : `${req.url}`,
});
if (!req.cancelToken) {
/*获取token*/
let token = sessionStorage.getItem("token");
/*此处设置额外请求头,token令牌*/
if (!!token) {
newReq.headers = newReq.headers.set("Authorization", `Bearer ${token}`);
}
}
// 携带请求头发送下一次请求
return next.handle(newReq).pipe(
tap(
(event) => {
if (event instanceof HttpResponse) {
// 成功
// console.log('成功', event.headers.get('x-refresh-encryptedtoken'))
if (!!event.headers.get("x-refresh-token")) {
sessionStorage.setItem(
"token",
event.headers.get("x-refresh-token")
);
sessionStorage.setItem(
"encryptedAccessToken",
event.headers.get("x-refresh-encryptedtoken")
);
}
}
},
(error) => {
// 失败
console.log("请求http失败", error);
this.handleError(error);
}
),
finalize(() => {
// 请求完成
// console.log('complete')
})
);
}
// 捕获错误
//401 token过期 403没权限!!! 400参数错误 404未找到 614刷新令牌过期!!!
private handleError(error: HttpErrorResponse) {
// 用户认证失败返回登录页
if (error.status === 401 || error.status === 614) {
sessionStorage.clear();
localStorage.removeItem("isautologin");
this.message.create("error", `用户认证信息过期,请重新登录!`);
this.router.navigate(["/singlelogin"]);
}
if (error.status === 403) {
this.message.create("error", `对不起,您无此权限!`);
}
if (error.status === 400) {
this.message.create("error", `请核对您的输入信息或格式是否正确!`);
}
if (error.status === 500) {
if (error.error.error.message) {
this.message.create(
"error",
`${error.error.error.details || error.error.error.message}`
);
} else {
this.message.create("error", `状态500`);
}
}
if (error.status === 404) {
this.message.create("error", `${error.error.error.message}`);
}
if (error.error instanceof ErrorEvent) {
// 发生客户端或网络错误。相应处理。
console.error("An error occurred:", error.error.error.message);
} else {
// 服务端返回http状态码
// 服务端返回错误信息
console.error(
`Backend returned code ${error.status}, ` + `body was: ${error.error}`
);
}
// 返回带有面向用户的错误信息
return throwError(error);
}
}