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

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

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

public void configure(HttpSecurity http) throws 
    http.headers()
        .and()
        .csrf().disable()
        .authorizeRequests()
        .antMatchers(HttpMethod.GET, "/secure").access("isAnonymous() and hasIpAddress('192.168.100.0/24')")
        .antMatchers(HttpMethod.GET, "/public").permitAll()
        .antMatchers("/**").denyAll()
        .and()
        .addFilterAfter(createCorsFilter(), LogoutFilter.class);
}

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

ClientBuilder clientBuilder = ClientBuilder.newBuilder();
ClientConfig config = new ClientConfig();
Client jerseyClient = clientBuilder..withConfig(config).build();

WebTarget target = jerseyClient.target("https://localhost").path("service/secure");
target = target.queryParam("test", test);

Builder request = target.request();
request.accept(MediaType.APPLICATION_JSON);

String response = request.get(String.class);

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

eth0   Link encap:Ethernet  HWaddr 06:34:12:AC:00:8A
       inet addr:192.168.100.2  Bcast:192.168.100.255  Mask:255.255.255.0
       inet6 addr: fe80::434:12ff:feac:8a/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo     Link encap:Local Loopback
       inet addr:127.0.0.1  Mask:255.0.0.0
       inet6 addr: ::1/128 Scope:Host
       UP LOOPBACK RUNNING  MTU:65536  Metric:1

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

暂无答案!

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

相关问题