【问题标题】:Spring Controller Get REST API is called more than once when accessed by user authenticated by 3rd party serviceSpring Controller Get REST API 在被第三方服务认证的用户访问时被多次调用
【发布时间】:2021-08-26 12:39:15
【问题描述】:

我有一个 Spring 应用程序(比如 ServiceA),它只有一个用户执行与管理相关的操作。 ServiceA 有它自己的 UI(Angular)。 该应用程序还为通过 3rd 方服务(例如 ServiceB)进行身份验证的其他用户提供服务。 ServiceB 有自己独立的 UI(Flutter)。

当 ServiceB 想要访问 ServiceA 的 Rest api 时,它会发送一个 jwt 访问令牌。 ServiceA 处理这个令牌,如果授权将允许访问 api。 为 ServiceA 配置了 JWT 令牌过滤器

ServiceA 有一个用于 GET 操作的 Rest api。当 ServiceA 的 Admin 用户访问此 API 时,端点工作正常。但是,当 GET 请求来自 ServiceB 时,API 会被调用三次。 API输出结果为json,如下图......

{ //内容 }{ //内容 }{ //内容 }

由于这是一个无效的 json 格式,第 3 方 UI 无法处理输出。

使用 Postman 发送请求也表现出相同的行为。 知道为什么 api 会被多次调用吗?

临时解决方案

GET Rest Api的签名如下......

public ResponseEntity getResult(HttpServletRequest 请求,HttpServletResponse 响应, @RequestParam 长 id)

我将 Rest Api 更改为 POST 如下(使用 RequestBody)...

public ResponseEntity getResult(HttpServletRequest 请求,HttpServletResponse 响应, @RequestBody TempObj obj)

现在我是 Rest Api 只被调用一次。仍然想知道为什么 GET 有问题

【问题讨论】:

    标签: spring-boot spring-security


    【解决方案1】:

    临时解决方案:

    GET Rest Api 的签名如下......

    public ResponseEntity getResult(HttpServletRequest request, HttpServletResponse response, @RequestParam Long id)

    我将 Rest Api 更改为 POST 如下(使用 RequestBody)...

    public ResponseEntity getResult(HttpServletRequest 请求,HttpServletResponse 响应,@RequestBody TempObj obj)

    现在 Rest Api 只被调用一次。

    仍然想知道为什么 GET 有问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2019-05-17
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多