|
|
|
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) {
|
|
|
|
|
|
|
|
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()
|
|
|
|
// window.localStorage.clear()
|
|
|
|
localStorage.removeItem("isautologin")
|
|
|
|
this.message.create('error', `用户认证信息过期,请重新登录!`);
|
|
|
|
this.router.navigate(['/login'])
|
|
|
|
}
|
|
|
|
if (error.status === 403) {
|
|
|
|
this.message.create('error', `对不起,您无此权限!`);
|
|
|
|
}
|
|
|
|
if (error.status === 400) {
|
|
|
|
this.message.create('error', `请核对您的输入信息或格式是否正确!`);
|
|
|
|
}
|
|
|
|
if (error.status === 500) {
|
|
|
|
// console.log('xxxx',error)
|
|
|
|
this.message.create('error', `状态500,服务器错误!${error.error.error.message}`);
|
|
|
|
}
|
|
|
|
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);
|
|
|
|
};
|
|
|
|
}
|