代码之家  ›  专栏  ›  技术社区  ›  ZhaoGang

springboot2.0.5项目CORS问题:将CORS头添加到http响应中

  •  0
  • ZhaoGang  · 技术社区  · 6 年前

    我知道很多关于这个的帖子。但我试了半天,还是失败了。

    我试过:

    1. 在my中添加以下方法 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("/**");
        }
    }
    

    @CrossOrigin 对于我的控制器类和post映射方法:

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

    但是我的小提琴手从来没有显示想要的http响应头。任何想法。

    0 回复  |  直到 6 年前
        1
  •  1
  •   ZhaoGang    6 年前

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

    @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() {
        }
    
    }