当前位置: 首页 > 知识库问答 >
问题:

当通过第三方服务验证的用户访问Spring Controller获取REST API时,会多次调用该API

钱浩荡
2023-03-14

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

当ServiceB想要访问ServiceA的RESTAPI时,它会发送一个jwt访问令牌。ServiceA处理此令牌,如果获得授权,将允许访问api。已为ServiceA配置JWT令牌筛选器

ServiceA有一个用于GET操作的restapi。当ServiceA的管理员用户访问此API时,endpoint工作正常。然而,当GET请求来自ServiceB时,API被调用三次。API输出结果为json,如下所示。。。。

{//content}{//content}{//content}

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

使用邮递员发送请求也显示了相同的行为。知道为什么api被多次调用吗?

临时解决方案:

GetRESTAPI的签名如下所示。。。。

公共响应实体获取结果(HttpServlet请求,HttpServlet响应响应,@请求参数长id)

我将RESTAPI更改为POST,如下所示(使用了RequestBody)。。。

公共响应实体获取结果(HttpServlet请求,HttpServlet响应,@请求体TempObj obj)

现在我很高兴RESTAPI只被调用一次。还在想为什么GET会有问题

共有1个答案

商畅
2023-03-14

临时解决方案

GetRESTAPI的签名如下所示。。。。

公共响应实体获取结果(HttpServlet请求,HttpServlet响应响应,@请求参数长id)

我将RESTAPI更改为POST,如下所示(使用了RequestBody)。。。

公共响应实体获取结果(HttpServlet请求,HttpServlet响应,@请求体TempObj obj)

现在Rest Api只被调用一次。

还在想为什么GET会有问题

 类似资料:
  • 我们正在整合谷歌日历和我们的房间预订系统。GSuite域中的用户应该登录我们的预订屏幕并预订房间。到目前为止,我使用了一个具有域范围委托的服务帐户来模拟用户(< code>setSubject()方法,传递被模拟用户的电子邮件地址)。一切都正常,尽管这样我们无法验证我们想要模拟的用户是否成功登录,事件将只是以他作为组织者来创建,因为setSubject()只需要电子邮件正常工作。在IBM Domi

  • 我是保险丝骆驼的新手,cxf。 我想调用第三方web服务。我不想使用wsld2java或serviceclass。我有一个wsdl。 下面是进行通用 Web 服务调用的要求 json请求数据- 1.如何将json转换为soaprequest(xml),反之亦然(Marshall格式soapjxab需要jaxb注释类)2.如何在有效负载模式下调用soap。。 任何帮助(链接/示例)将不胜感激。 谢谢

  • 本文向大家介绍通过PHP实现获取访问用户IP,包括了通过PHP实现获取访问用户IP的使用技巧和注意事项,需要的朋友参考一下 在php中自带了一个非常的简单的获取IP地址的全局变量,很多初学都获取IP都使用它了,但是对于这些我们一般用法是满足了,但是对于要求高精度这个函数还是不行的。 这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了: $

  • 问题内容: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 这是一段代码,但是没有用。不起作用意味着即使会话过期,它也不会重定向到登录页面。 请帮助我解决此问题。 问题答案: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 老实说,这完全没有道理。如果将已登录用户存储为会话的属性,并基于会话中已登录用户的存在来拦截“已登录”状态,则在任何时候都不需要手动注销该用户。会话已过期。当会

  • 我目前正在实现JWT身份验证,Passport.js到NestJS应用程序中。 在我的一些GraphQL解析器中,我需要访问当前已认证的用户。我知道passport会将经过身份验证的用户附加到请求对象上(至少我希望这是正确的),但是我不知道如何在解析器中访问请求对象。 我关注了问题https://github.com/nestjs/nest/issues/1326和问题中提到的链接https://