|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|