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

时间:2017-06-28 09:33:55

标签: spring java-ee spring-boot cors

在我们的Spring Boot应用程序中,我们在Quality环境中进行了第一次部署,现在我们希望简单地定义URL以接受来自FrontEnd应用程序的请求。

我们使用maven构建应用程序,然后使用命令

执行它
java -Dspring.profiles.active=prod -jar myapp-0.0.1-SNAPSHOT.jar

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

那么你们会做什么?我对谷歌没有找到任何东西印象深刻,显然人们有不同的解决方法,或者我的搜索方式错误。

修改 Cross Origin信息: 这就是我们最初实施它的方式。

@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;
}

1 个答案:

答案 0 :(得分:3)

问题是你CorsFilter不是一个春天的豆子。您可以将其定义为bean,或者执行以下操作:

    @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

相关问题