在 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 {
...
}
据我所知,您不能对注释使用条件。但是您可以创建自定义 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);
}
}
};
}