Spring Boot @CrossOrigin 仅在开发中

问题描述 投票:0回答:1

在 Spring Boot 项目中是否有办法仅在开发模式下使用

@CrossOrigin(origins = "*", maxAge = 3600)
来表示
@RestController
@RequestMapping("/api/auth")

开发的原因是我的前端在开发过程中可能会在很多不同的地方,这就是为什么我需要启用CORS。在生产模式下,这是非常不同的。我在那里专注于安全性,并且前端具有相同的起源,这就是为什么我不想在那里启用它。

有没有办法像这个伪Java代码一样区分这一点?

if (mode.dev) {
    @CrossOrigin(origins = "*", maxAge = 3600)
}
@RestController
@RequestMapping("/api/something")
public class SomeController {
    ...
}
java spring-boot cors
1个回答
0
投票

据我所知,您不能对注释使用条件。但是您可以创建自定义 CorsFilter 或 CorsConfig bean,这可以解决您的问题

private CorsConfigurationSource createCorsConfigurationSource() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();

        if (Boolean.parseBoolean(env.getProperty("mode.dev"))) {
            // Define your CORS configuration for development
            config.addAllowedOrigin("*");
        }

        return source;
    }

或者,

    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                if (Boolean.parseBoolean(env.getProperty("mode.dev"))) {
                    registry.addMapping("/api/something")
                            .allowedOrigins("*")
                            .maxAge(3600);
                }
            }
        };
    }
© www.soinside.com 2019 - 2024. All rights reserved.