【问题标题】:Spring boot 2.0.5 project CORS issue: add the CORS header to the http responseSpring boot 2.0.5项目CORS问题:将CORS头添加到http响应中
【发布时间】:2020-02-10 16:29:28
【问题描述】:

我知道 SO 中的很多帖子都在谈论这个。但是我试了半天还是失败了。

我试过了:

  1. 在我的Application 类中添加以下方法:
@Bean 
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("*");
        }
    };
}
  1. 在我的项目中添加一个独立的.java 文件:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

3 为我的控制器类和后映射方法添加控制器级别注释@CrossOrigin

@CrossOrigin
@PostMapping(value="/api/photoUpload/tester")
String tester(HttpServletRequest request) {

但我的提琴手从未显示想要的 http resonse 标头。有任何想法吗。

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    在您的项目中添加此附加配置。

    @Configuration
    public class AdditionalConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true);
            config.addAllowedOrigin("*");
            config.addAllowedHeader("*");
            config.addAllowedMethod("*");
            source.registerCorsConfiguration("/**", config);
            return new CorsFilter(source);
        }
    }
    
    

    如果它不起作用。那么你可以尝试使用基本的Servlet filter,而不是Spring框架提供的设施。

    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;
    
    public class CORSFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
                throws IOException, ServletException {
    
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers",
                    "X-Requested-With, Content-Type, Authorization, Origin, Accept, Access-Control-Request-Method, Access-Control-Request-Headers");
            chain.doFilter(req, res);
        }
    
        @Override
        public void init(FilterConfig filterConfig) {
        }
    
        @Override
        public void destroy() {
        }
    
    }
    
    
    
    

    【讨论】:

    • import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;---是导入权吗?
    • 没有错误。我使用 fiddler 来观看 http resonse。但我看不到access-control-allow-originheader。
    • 请参考这可能会有所帮助stackoverflow.com/questions/32319396/…
    • 链接有效。更新您的答案,我会接受。 @Pawan Maurya
    • 你可以用更新码@ZhaoGang 看看吗?
    猜你喜欢
    • 2021-04-11
    • 2016-05-15
    • 2019-09-05
    • 2016-07-09
    • 2018-07-12
    • 1970-01-01
    • 2018-06-03
    • 2019-05-05
    • 2020-03-16
    相关资源
    最近更新 更多