我使用ngrx来存储我的会话信息(令牌本身和它的到期日期)。超文本传输协议管道中有两个拦截器:拦截器1将令牌从存储注入超文本传输协议请求,拦截器2从响应中读取自定义超文本传输协议标头“X-会话-到期”并将其放入存储中(我在一个拦截器中也有这两个操作,也没有解决问题)。
intercept(request: HttpRequest, next: HttpHandler): Observable> { return this.store.select(SessionSelectors.sessionToken).pipe( first(), mergeMap(token => { console.log("interceptor 1"); if (token) { request = request.clone({ headers: request.headers.set('Authorization', 'User ' + token) }); } return next.handle(request); }) ); }
intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe(map((event: HttpEvent) => { if (event instanceof HttpResponse) { console.log("interceptor 2"); if (event.headers.has("X-Session-Expiration")) { var value = event.headers.get("X-Session-Expiration"); var expiration = new Date(value); this.store.dispatch(new SessionActions.RefreshSessionExpiration({ newExpirationDate: expiration })); } return event; })); }
这将创建一个无限循环。拦截器 2 中的存储修改会触发拦截器 1 中的订阅,这会触发 http 请求,从而触发拦截器 2,依此类推。
为了防止这种情况,我在拦截器1中插入了first()或take(1),但它似乎没有改变任何东西。
尝试在拦截器的开头添加if语句
intercept(request: HttpRequest, next: HttpHandler): Observable> {
if (request.url === 'api/refresh-token') {
return next.handle(request);
}
return this.store.select(SessionSelectors.sessionToken).pipe(
mergeMap(token => {
.....
}
return next.handle(requestWithToken);
})
);
}
我在网上尝试了一些建议,但没有帮助。是否需要在客户端做任何事情来修复CORS相关的问题--或者这都是服务器端的问题?
easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,
你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure
Uragano里可以自定义拦截器,并且拦截器分服务器端拦截器和客户端拦截器 拦截器还分全局拦截器和局部拦截器,并且拦截器也是支持依赖注入的 创建拦截器 public class ClientGlobalInterceptor : InterceptorAbstract { private ILogger Logger { get; } public
功能限制拦截断点 bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口
问题内容: 我正在尝试测试响应拦截器,但是很难弄清楚如何模拟$ window对象。这是我的拦截器代码: 这是我的规格: 我有一个:。关于如何正确模拟$ window对象或更一般地说如何测试401 +重定向情况的任何帮助? 问题答案: 您应该使用最新的语法来构造拦截器定义。您的URL构造也应包含在服务中,以便可以在测试中轻松模拟它。 这样做可以让您像其他任何工厂一样对其进行测试,而不必担心拦截器的内