是否可以使用REST和httpInvoker在Spring Boot 中远程公开bean

ftf50wuq  于 2023-03-02  发布在  Spring
关注(0)|答案(6)|浏览(118)

我需要公开一些服务以供Java客户端(它们应该使用httpinvoker)和其他语言(它们应该使用REST)远程使用。
我可以配置spring Boot 来公开这两个示例吗?(我不介意使用两个具有不同端口的独立示例,就像this post一样)。
我放弃了为内部使用REST的Java客户端提供API的想法,因为使用RestTemplate.手动将所有REST端点连接到代码中是相当乏味的。我喜欢HttpInvoker的概念,因为ProxyFactoryBean可以自动使用。如果Spring Remoting能够以一种可以为JMS、AMQP和其他应用程序完成的方式来完成这一点,我将朝着这一方向前进。

qrjkbowd

qrjkbowd1#

你可以这样做,把你的服务公开为一个休息服务,然后让你的java客户端使用http或其他库来消费这些服务,如果其他任何一方也感兴趣,他们也可以用他们自己的方式来消费。
另外,您可以创建自己的jar来使用您的rest服务,并让您的java客户端使用它,而无需了解rest服务。

w80xi6nr

w80xi6nr2#

在Sping Boot 中暴露HTTP调用程序端点实际上非常容易,看起来好像缺少了什么。在路径上有spring-webmvc@SpringBootApplication中(例如使用spring-boot-starter-web POM),添加以下bean定义:

@Bean(name = "/my.service")
public HttpInvokerServiceExporter myHttpInvokerServiceExporter(MyService myServiceImpl) {
    HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
    exporter.setServiceInterface(MyService.class);
    exporter.setService(myServiceImpl);
    return exporter;
}

HTTP调用程序终结点现在在/my.service公开,不会影响任何其他Map。您可以添加任意数量的此类终结点;然后一些@RequestMapping用于顶部的REST。

30byixjq

30byixjq3#

我们在这里使用两种技术。HttpInvoker用于Java到Java调用。普通的JSON over HTTP用于其他客户端(类似于REST,但不是真正的REST)。我认为jsonrpc4j项目提供了一种很好的方法来实现HTTP内容。

7cwmlq89

7cwmlq894#

看一看spring-rest-invoker,它将Java接口绑定到REST服务,这并没有解决“暴露”服务的问题,但使使用它变得更加容易。
https://github.com/ggeorgovassilis/spring-rest-invoker

56lgkhnf

56lgkhnf5#

HttpInvoker在spring集成2.x之后被删除:http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html(!Important header提供详细信息)。3.x和4.x版本中有HTTP支持的参考:http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html
还有另一个SO帖子,有人询问HTTP支持和spring Boot 的一些相关信息:Spring Integration Http with Spring Boot and @RequestMapping
希望这能让你从兔子洞里走出来。

jdg4fx2g

jdg4fx2g6#

当调用者的信任度无法验证时,使用Spring HTTP Invoker是很危险的。很长一段时间以来,它都被弃用了,而且在Spring 6中,它的支持将被移除,所以不要使用它。
最好将通信实现为REST调用,并将其 Package 在易于使用的方法中,就像其他一些答案所建议的那样,即Maleen Abewardana的one-https://stackoverflow.com/a/29840971/3673367
参考文献:

  • https://github.com/spring-projects/spring-framework/issues/27422-删除RPC样式远程处理:Hessian、HTTP调用程序、JMS调用程序、JAX-WS
  • 联系我们-CVE-2016 - 1000027详细信息
  • https://github.com/spring-projects/spring-framework/issues/24434#issuecomment-579669626 - „Java serialization is unsafe, and all we can do is advise against exposing HTTP Invoker endpoints to untrusted clients"

P.S.是的,我知道这个问题很老了,我确信OP不再需要答案了,但是我写这个问题是为了所有其他未来的读者,所以他们不使用Spring HTTP Invoker,也不使用任何其他类似RPC/RMI的Spring特性。

相关问题