Spring 如何在Prod/Dev环境中处理CORS URL?
在我们的SpringBoot应用程序中,我们在我们的高质量环境中进行了第一次部署,现在我们希望简化定义URL以接受来自前端应用程序的请求 我们用maven构建应用程序,然后用命令执行它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,但这不起作用,因为在执行时它是空的。另一个解决方法
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上下文中进行的。