如何配置springboot以允许从ip www.example.com发出请求10.0.2.2

mdfafbf1  于 2023-01-02  发布在  Spring
关注(0)|答案(1)|浏览(128)

我想在虚拟MacOS上测试我的angular应用程序,但问题是我使用10.0.2.2 IP连接到资源。我应该在我的springboot应用程序中做些什么才能从localhost和www.example.com访问和10.0.2.2?

6ie5vjzr

6ie5vjzr1#

您有两种选择:

1)让Angular dev服务器将后端请求代理到后端

您需要创建一个文件proxy.conf.json并在您的angular.json文件中引用它:

"serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            ...
       --> "proxyConfig": "proxy.conf.json" <-- 
          },
          ...
        }

在你的proxy.conf.json中,你定义了你想代理到哪个主机的路径,假设你的API请求都以/api为前缀,并且你的Spring后端运行在1234端口上,你需要如下配置:

{
  "/api/*": {
    "target": "http://localhost:1234",
    "secure": false
  }
}

然后你需要确保你在开发模式下的请求仅仅是相对的,不包括主机名。你可以通过在你的environment.ts中有一个名为BACKEND_URL的键来实现这一点,在开发中它是一个空字符串,而在environment.prod.ts中它是实际的URL。然后你需要在你的服务中使用这个键来调用你的后端。
更多信息可以在官方Angular文档中找到。

2)在控制器/控制器端点上设置@CrossOrigin注解

您可以直接指定哪些主机应该被允许访问您的端点。由于您只需要出于测试/开发目的来实现这一点,我建议您坚持使用第一种方法,这样您的生产代码中就不会有与开发相关的代码。
a Spring guide的示例适用于您的IP地址:

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";

    private final AtomicLong counter = new AtomicLong();

    @CrossOrigin(origins = "10.0.2.2")
    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(required = false, defaultValue = "World") String name) {
        System.out.println("==== get greeting ====");
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }

}

这里有一个关于这个主题的Baeldung article,当然还有official Spring reference

相关问题