处理SPA的外部不可达服务的最佳方法是什么?

问题描述 投票:0回答:1

对于个人项目,我正在开发一个门户,该门户仅向连接的用户提供某些服务。当您未连接时,您将被重定向到管理身份验证流程(登录,密码恢复等)的密钥斗篷,并使用令牌重定向到我的角度应用程序,然后对于每次对我的Web服务的调用,我都会提供经过验证的令牌对于我的Web服务和密钥隐藏之间的每个请求。

我设计了以下应用程序:(非常简单的视图)enter image description here

我的问题是我的角度应用程序对Keycloak和Web服务有很大的依赖性。我希望我的应用程序具有弹性,并且至少在keycloak和/或Web服务处于脱机状态时,并且在发生任何错误或不良行为(例如:错误500)的情况下,都应做好准备。

我看到了我可以做的几件事:

  • 我可以在我的角度应用程序中创建一个匿名布局(以便任何人都可以直接访问它),其中一个页面专门用于重定向,该页面首先将检查keycloak和我的网络服务的可用性(简单的http请求,以查看是否获得200状态代码),我可以循环执行一次(假设每2秒进行一次),并显示一条显示状态的信息消息,然后两者都可以,然后重定向到keycloak应用。
  • [我可以创建一个拦截器,每当我收到状态码为401的响应达x秒时,就会显示覆盖图,然后重定向到keycloak登录页面。
  • [当我收到任何其他400或500状态代码的响应时,可以显示带有信息的通用模态,可以通过按钮关闭该窗口,邀请用户稍后对其进行测试。
  • 这些是我现在拥有的想法,但我不确定这是正确的方法。

    我没有找到任何相关的教程或文章来解释如何正确执行此操作(也许我使用了错误的关键字)

你有想法吗?

对于个人项目,我正在开发一个门户,该门户仅向连接的用户提供某些服务。未连接时,您将被重定向到管理身份验证流程的密钥斗篷(...

angular spring architecture single-page-application keycloak
1个回答
0
投票

我相信最好的方法是拦截器,您可以在其中处理不同的错误。例如:

@Injectable()
export class RequestInterceptor implements HttpInterceptor {
  intercept (request: HttpRequest<any>, next: HttpHandler) : Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      catchError(error => {
        if (error.status === 0) {
          // Handle unreachable server
        }

        if (error.status === 401) {
          // Handle unauthenticated user
        }

        if (error.status === 500) {
          // Handle server error
        }

        return throwError(error);
      })
    );
  }
}

0
投票

您可以在重定向之前实施“运行状况检查”,但我在循环中看不到进行此检查的原因。您只能在实际重定向之前执行一次。但这仍然是幼稚的测试,因为在用户请求处理期间可能会出错,并且您希望能够从SPA覆盖它。

© www.soinside.com 2019 - 2024. All rights reserved.