我的问题是关于最近我一直摸不着头脑的事情——
在我的拦截器中,我有一些代码可以解析和处理某些错误,并将根据错误的状态代码等以某些方式执行操作(我没有包含此代码,因为它实际上对这个问题没有任何作用,但如果有人有充分的理由为什么我应该包括它,我绝对可以。
我试图弄清楚如何net :: ERR_TIMED_OUT在拦截器中处理(使用谷歌浏览器/歌剧)。我已经追踪到一个点,我可以知道请求正在构建并正在“处理”,但在那之后,请求和响应都消失了。我最初的想法是,XMLHttpRequest某个地方出现了错误,并且它以某种方式被抑制,并且响应被丢弃。
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const intercepted = this.setHeaders(req);
return this.SetPendingRequests(next.handle(intercepted))
.pipe(catchError((err): Observable<HttpEvent<any>> => {
return this.ParseErrorResponse(err);
}));
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过添加finalize(() => {})它,并且在每种情况下都工作得很好,除了这个,ERR_TIMED_OUT基本上似乎决定所有事情都必须停止。
我也尝试过直接连接XMLHttpRequest,而 Angular 对此并不太友好——因为我觉得问题的根源可能源于它本身。
所有 google/stackoverflow 搜索几乎都表明这是一个本地问题,但我觉得好像应该有某种方法在我的代码中处理它,所以如果用户在使用我的应用程序时遇到此错误,我会能够适当地处理这个问题。基本上,我只想要任何请求ERR_TIMED_OUT(奇怪的是,其他浏览器基本错误返回“未知错误”类型的错误 - 这是我发现的唯一奇怪的异常值,它只是停止了一切。我希望看到如果其他人遇到了这个问题/愿意帮助我找出它。
感谢对此事的任何帮助并提前致谢,
我已经实现了 Http 拦截器,并在服务启动时显示微调器,并在服务成功/失败时隐藏微调器。
代码示例:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse && event.body.errCode != undefined) {
// show_spinner
}
}),
finalize(()=>{
// hide_spinner
})
}
Run Code Online (Sandbox Code Playgroud)
例如,有两个服务调用同时发生;因此,将显示与两个调用相对应的微调器,但第一个服务在2 秒内完成,第二个服务在5 秒内完成;现在,旋转器将在第一个调用完成后隐藏,将无法确认第二个服务调用。
httprequest interceptor rxjs angular-http-interceptors angular
我在角度应用程序中有一个拦截器
整个想法是jwt 令牌的有效期为 30'
偶尔我会从状态代码中收到错误,所以我会处理它
但有时,没有错误,所以我不想抛出任何异常
因为我没有返回任何东西,所以我收到了这个错误
您在需要流的地方提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable。
除非我抛出像 throwError("OK"); 这样的假异常
这是我的拦截函数
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
{
return next.handle(request).pipe(catchError(err =>
{
const error = (err.error?err.error.message:null) || err.statusText;
switch (err.status) {
case 401:
{
// token expired -> goto login, dont return error
this.appService.clearUserSession();
this.router.navigate(['login']);
<<<<<<<<<<<<<<< HERE I DON'T WANT TO THROW AN ERROR, WHAT TO RETURN ?
}
break;
case 500:
{
return throwError(error);
}
break;
default:
{
if(error!="OK")
{
return throwError(error);
}
else …Run Code Online (Sandbox Code Playgroud) 使用 AspectJ 或 Spring Aop(无关紧要),是否可以仅在从某个类中调用该方法时才拦截该方法?
例子:
public class House() {
String address;
public House(String address) {
this.address = address;
}
public String getAddress() {
return this.address();
}
}
public class BadHouse() {
public void doNotIntercept() {
House h = new House("1234");
h.getAddress();
}
}
public class GoodHouse() {
public void intercept() {
House h = new House("4567");
h.getAddress();
}
}
public class houseInterceptor() {
@Before("execution(com.example.House.getAddress(..))")
// only intercept on GoodHouse.class???
public void beforeGetAddress();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下可以使用“within”吗?谢谢
在我的演示应用程序中,我遇到一个问题,即我没有收到从 Angular 客户端添加到 Spring boot 服务器的请求标头。作为安全措施,我有 SSL(安全套接字层)和 CORS(跨源资源共享)配置。在我的应用程序中,CSRF(跨站点请求伪造)被禁用。我使用 JWT(JSON Wen Token)作为每个请求的用户身份验证机制。这就是我需要从标头中提取 JWT 密钥的地方。我将从我的应用程序中添加代码示例,请帮助我找出问题。
\n角拦截器
\nimport { Injectable } from \'@angular/core\';\nimport { HttpEvent, HttpInterceptor, HttpResponse, HttpHandler, HttpRequest, HttpHeaders } from \'@angular/common/http\'; \nimport { UserService } from \'./user.service\';\nimport { Observable } from \'rxjs\';\n\n/*Interceptor\n Often you\xe2\x80\x99ll want to intercept HTTP requests or responses before they\xe2\x80\x99re handled else where in the application*/ \n\n@Injectable({\n providedIn: \'root\'\n})\nexport class InterceptorService implements HttpInterceptor {\n\n /**\n * Constructor of InterceptorService. \n * @param userService UserService\n */\n constructor(private …Run Code Online (Sandbox Code Playgroud) 我试图遵循这个线程,但我不断收到错误。
变换响应.interceptor.ts:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { ApiResponseInterface } from '@walletxp/shared-interfaces';
@Injectable()
export class TransformResponseInterceptor<T>
implements NestInterceptor<T, ApiResponseInterface<Record<string, unknown>>>
{
intercept(context: ExecutionContext, next: CallHandler): Observable<ApiResponseInterface<Record<string, unknown>>> {
return next.handle().pipe(map((data) => ({ success: true, data })));
}
}
Run Code Online (Sandbox Code Playgroud)
对于它的测试,transform-response.interceptor.spec.ts:
import { TransformResponseInterceptor } from './transform-response.interceptor';
const interceptor = new TransformResponseInterceptor();
const executionContext: any = {
switchToHttp: jest.fn().mockReturnThis(),
getRequest: jest.fn().mockReturnThis(),
}; …Run Code Online (Sandbox Code Playgroud) 请求有关此拦截器注释的更多信息。为什么拦截器注解叫@AroundInvoke而不是@BeforeInvoke?
例如,我可以在操作 API 之前调用访问验证吗?如何保证在实际调用方法之前完成访问验证?VM 或 CDI 实现是否会执行某些操作,但不会阻止实际调用,而是并行执行此拦截器?
如果我使用Google Guice AOP 方法拦截器,我确信访问验证失败将确定方法调用是否开始。我如何确保雅加达 CDI 也会采取类似的行为?
无法在规范中找到此信息
可以在这里找到相关问题。但上述具体问题仍未得到解答。
我很好奇 axios 拦截器和默认标头之间的区别。
我想在标题中添加授权。
我知道我可以使用 axios 拦截器和默认标头管理授权标头。(为所有 axios 请求附加授权标头)
我不确定何时分别使用拦截器和默认标头。
难道只是axios提供了两种方法吗?
我正在将 flutter 用于我的移动应用程序。我可以拦截请求。但我不知道如何在flutter中拦截GRPC中的响应。
如何在flutter中拦截GRPC响应?
我正在编写自定义处理程序拦截器以获得多语言URL地址.例如,当用户访问uri时/de/auto,将出现deutsch内容,当用户访问时,/en/car将出现英语内容.我希望两个请求都重定向到同一个控制器和相同的方法:
@Controller
public class MultiLangController {
@RequestMapping(value="/en/car", method = RequestMethod.GET)
public @ResponseBody String writePage() {
return "some content";
}
Run Code Online (Sandbox Code Playgroud)
我的拦截器是这样实现的(简化版):
public class MultiLangInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String requestUrl = request.getRequestURI().substring(request.getContextPath().length());
if ("/de/auto".equals(requestUrl)) {
String redirect = request.getContextPath() + "/en/car";
response.sendRedirect(redirect);
return false;
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我/en/car在浏览器中访问url时,返回正确的页面(带有"some content"消息),日志显示请求通过我的拦截器传递.当我访问时/de/auto,返回404错误并根据日志请求没有进入我的拦截器.但为什么?不应该请求通过所有拦截器,直到其中一个拦截器通过返回false来阻止它?
为清楚起见,我没有使用,mvc:annotation-driven因为它隐藏了我的自定义拦截器.我已经定义了所有的手段
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors"> …Run Code Online (Sandbox Code Playgroud) interceptor ×10
angular ×4
java ×4
http ×2
spring ×2
aop ×1
axios ×1
cdi ×1
flutter ×1
grpc ×1
http-headers ×1
httprequest ×1
jestjs ×1
multilingual ×1
nestjs ×1
rxjs ×1
spring-boot ×1
timeout ×1
typescript ×1
url ×1