Spring 如何在Prod/Dev环境中处理CORS URL?

Spring 如何在Prod/Dev环境中处理CORS URL?,spring,jakarta-ee,spring-boot,cors,Spring,Jakarta Ee,Spring Boot,Cors,在我们的SpringBoot应用程序中,我们在我们的高质量环境中进行了第一次部署,现在我们希望简化定义URL以接受来自前端应用程序的请求 我们用maven构建应用程序,然后用命令执行它 java -Dspring.profiles.active=prod -jar myapp-0.0.1-SNAPSHOT.jar 我们认为可以在application.properties/application-prod.properties文件上设置URL,但这不起作用,因为在执行时它是空的。另一个解决方法

在我们的SpringBoot应用程序中,我们在我们的高质量环境中进行了第一次部署,现在我们希望简化定义URL以接受来自前端应用程序的请求

我们用maven构建应用程序,然后用命令执行它

java -Dspring.profiles.active=prod -jar myapp-0.0.1-SNAPSHOT.jar
我们认为可以在
application.properties/application-prod.properties
文件上设置URL,但这不起作用,因为在执行时它是空的。另一个解决方法是在运行应用程序时获取参数
-Dspring.profiles.active=prod
,然后获取一个或另一个URL,但这似乎有点脏

你们会怎么做?在谷歌上找不到任何东西给我留下了深刻的印象,显然人们有不同的解决办法,或者我用错误的方式搜索

编辑 跨原产地信息: 这就是我们最初实现它的方式

@CrossOrigin(origins = BasicConfiguration.CLIENT_URL)
这就是我们现在想用一个带Spring Security的过滤器来实现的

public class CorsFilter implements Filter, ApplicationContextAware {
    @Value("${urlServer}")
    private String urlServer;

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", urlServer);
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        response.setHeader("Access-Control-Expose-Headers", "Location");
        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {}

    @Override
    public void destroy() {}
}
当然,urlServer是在application.properties中定义的,并带有相应的元数据

编辑2 如何初始化筛选器:

@Bean
public FilterRegistrationBean corsFilter() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new CorsFilter());
    registration.addUrlPatterns("/sessionLogin");
    return registration;
}

问题是您
CorsFilter
不是一个springbean。你可以像吃豆子一样定义它,或者做类似的事情:

    @Bean
    public FilterRegistrationBean corsFilter(@Value("${app.cors.url.server}") String urlServer) {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        CorsFilter corsFilter = new CorsFilter();
        corsFilter.setUrlServer(urlServer);
        registration.setFilter(corsFilter);
        registration.addUrlPatterns("/sessionLogin");
        return registration;
    }

当然,您需要在
CorsFilter
中为
urlServer
字段定义setter

您可以在设置CORS URL的位置共享您的代码吗?实际上,它与application.properties配合使用应该非常好,这是正确的方法,您可以从外部文件定义属性,覆盖application.properties中的属性。您如何创建CorsFilter对象?我猜您只是像
new CorsFilter()
那样创建它,所以它不是spring bean,也不受spring上下文的管理。这就是为什么你的属性不能被注入我添加了初始化@LeffchikThanks!我最终解决了制作另一个方法来返回一个带有@Bean注释的新Corsfilter()。成功了!事实上,问题在于CorsFilter的初始化不是在Spring上下文中进行的。