如何在启用CORS的 Spring Boot 中允许所有请求?

ycl3bljg  于 2022-11-28  发布在  Spring
关注(0)|答案(5)|浏览(259)

在我的 *Sping Boot * 应用程序中,目前我有这个类:

@SpringBootApplication
public class TestApplication {
   public static void main(String[] args) {
      SpringApplication.run(TestApplication.class, args);
   }
   @Bean
   public WebMvcConfigurer corsConfigurer() {
      return new WebMvcConfigurerAdapter() {
         @Override
         public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/user").allowedOrigins("http://localhost:3000");
         }
      };
   }
}

它只允许我从http://localhost:3000访问或写入,但我希望这个rest方法可以被任何东西访问,比如http://localhost:1000 ~ http://localhost:9999或任何站点。

如何启用该功能?

hgb9j2n6

hgb9j2n61#

在我的@SpringBootApplication注解类中,我添加了以下内容:

@Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*");
            }
        };
    }
kx1ctssn

kx1ctssn2#

最好为每一个创建两个API(控制器)(一个用于阅读,另一个用于写入)。
对于写入,请使用以下命令:

registry.addMapping("/user").allowedOrigins("http://localhost:3000");
//This will allow only calls from 3000 port to write

阅读时请使用以下内容:

registry.addMapping("/user").allowedOrigins("http://localhost");
//This will allow reading via all ports.
bttbmeg0

bttbmeg03#

虽然您可以手动完成其他提到的答案,但您可以简单地通过注解配置实现,如下所示:毕竟,Spring是一种约定而不是配置。

@CrossOrigin(origins = "*")
@GetMapping("/users" )

但是,请注意您使用'*'的内容。您将允许所有可以访问您的端点的站点。干杯。

trnvg8h3

trnvg8h34#

只需添加 * 代替url

registry.addMapping("/user").allowedOrigins("*");
yptwkmov

yptwkmov5#

您可以使用过滤器而不是Springboot安全性来启用CORS(无需在pom. xml中添加任何依赖项):

@Order(-1)  
@Component
public class SimpleCORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

//        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Origin", "*"); // * = all domainName
        response.setHeader("Access-Control-Allow-Credentials", "true"); // allow CrossDomain to use Origin Domain
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); 
        response.setHeader("Access-Control-Max-Age", "3600"); // Preflight cache duration in browser
//        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); 
        response.setHeader("Access-Control-Allow-Headers", "*"); // all header

        chain.doFilter(req, res);
    }

}

Springboot安全性也使用过滤器。请参阅参考:过滤器

相关问题