美文网首页
Spring Boot 设置支持非同源的请求-CORS

Spring Boot 设置支持非同源的请求-CORS

作者: 不善言谈_ | 来源:发表于2019-08-21 14:27 被阅读0次

    HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。

    前端使用了 CORS 协议,就需要后端设置支持非同源的请求,Spring Boot 设置支持非同源的请求配置有两种方式,还有一种动态的(配置拦截器)

    第一:配置 CorsFilter。

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

    需要配置上述的一段代码。第二种方式稍微简单一些。

    第二:在启动类上添加:

    public class Application extends WebMvcConfigurerAdapter {  
    
        @Override  
        public void addCorsMappings(CorsRegistry registry) {  
            registry.addMapping("/**")  
                    .allowCredentials(true)  
                    .allowedHeaders("*")  
                    .allowedOrigins("*")  
                    .allowedMethods("*");  
    
        }  
    }  
    

    第三:配置拦截器

    public class RequestOriginInterceptor extends HandlerInterceptorAdapter {
    
        private static final Logger logger = LoggerFactory.getLogger(RequestOriginInterceptor.class);
    
        private static final String DEFAULT_ORIGIN = "*";
    
        private String origin;
    
        public RequestOriginInterceptor() {
            this.origin = DEFAULT_ORIGIN;
        }
    
        public RequestOriginInterceptor(String origin) {
            this.origin = origin;
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
            response.setHeader("Access-control-Allow-Origin", origin);
            response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
            response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
            logger.info("uri={},request-Origin=【{}】,response-Origin=【{}】", request.getRequestURI(), request.getHeader("Origin"), response.getHeader("Access-control-Allow-Origin"));
            return true;
        }
    
    }
    
        //实现WebMvcConfigurer接口,或者继承WebMvcConfigurationSupport,WebMvcConfigurerAdapter(spring boot2.0过时)
        /**
         * 配置拦截器
         *
         * @param registry
         * @author lance
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //解决跨域问题
            registry.addInterceptor(new RequestOriginInterceptor()).addPathPatterns("/**");
        }
    

    相关文章

      网友评论

          本文标题:Spring Boot 设置支持非同源的请求-CORS

          本文链接:https://www.haomeiwen.com/subject/kuwbsctx.html