spring引导服务通过具有分配给机器的弹性ip地址的接口向AmazonEC-2机器上的另一个机器发送请求为什么?

6qqygrtg  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(244)

我在amazonec2机器上有两个spring引导服务(配置为使用jersey 2),为其分配了弹性ip(比如35.140.30.20)。在这两个服务前面有一个apache,它提供静态内容并通过mod proxy将服务调用转发给java服务。现在我希望一个服务访问另一个,并通过如下spring配置屏蔽来自外部的访问:

  1. public void configure(HttpSecurity http) throws
  2. http.headers()
  3. .and()
  4. .csrf().disable()
  5. .authorizeRequests()
  6. .antMatchers(HttpMethod.GET, "/secure").access("isAnonymous() and hasIpAddress('192.168.100.0/24')")
  7. .antMatchers(HttpMethod.GET, "/public").permitAll()
  8. .antMatchers("/**").denyAll()
  9. .and()
  10. .addFilterAfter(createCorsFilter(), LogoutFilter.class);
  11. }

为此,我在一个服务中创建了一个jersey客户端:

  1. ClientBuilder clientBuilder = ClientBuilder.newBuilder();
  2. ClientConfig config = new ClientConfig();
  3. Client jerseyClient = clientBuilder..withConfig(config).build();
  4. WebTarget target = jerseyClient.target("https://localhost").path("service/secure");
  5. target = target.queryParam("test", test);
  6. Builder request = target.request();
  7. request.accept(MediaType.APPLICATION_JSON);
  8. String response = request.get(String.class);

在我的本地开发机器上,一切正常。客户端可以成功地访问端点,而来自网络之外的任何其他计算机的请求都会被阻止。然而,我的ec2示例的情况是不同的。该示例有两个网络接口:

  1. eth0 Link encap:Ethernet HWaddr 06:34:12:AC:00:8A
  2. inet addr:192.168.100.2 Bcast:192.168.100.255 Mask:255.255.255.0
  3. inet6 addr: fe80::434:12ff:feac:8a/64 Scope:Link
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5. lo Link encap:Local Loopback
  6. inet addr:127.0.0.1 Mask:255.0.0.0
  7. inet6 addr: ::1/128 Scope:Host
  8. UP LOOPBACK RUNNING MTU:65536 Metric:1

我希望服务使用两个本地接口之一的地址来进行调用。但在监听服务中,我看到请求来自35.140.30.20,因此被拒绝。我还将可用的网络接口记录在请求服务中,该服务只生成上述两个接口。我不能在安全配置中使用弹性ip,因为从apache转发的每个请求也都来自该ip,这也有点奇怪,但我可以理解,因为apache实际上是通过该ip直接访问的。
那么我的spring引导服务怎么知道这个ip呢?我怎样才能让它使用本地网络呢?
整个事情是一个更大的项目中的概念证明,所以我真的不能分享更多的代码或工作程序。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题