zoukankan      html  css  js  c++  java
  • springboot 跨域问题(CORS)

     什么是跨域(CORS)

    跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于JavaScript所定义的安全限制策略。

    也就是如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。

    同域:

      • 同一协议, 如http或https
      • 同一IP地址, 如192.168.1.2
      • 同一端口, 如8080
        以上三个条件中有一个条件不同就会产生 跨域问题。

    1.@CrossOrigin注解

    2.WebMvcConfigurer

    @Configuration
    public class CorsConfiguration {
      @Bean
      public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
          @Override
          public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")        

            .allowedOrigins("*")

            .allowCredentials(true)
            .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
            .allowedOrigins("*");
          }
        };
      }

    }

    3.使用Filter方式进行设置使用Filter过滤器来过滤服务请求,向请求端设置Response Header(响应头部)的Access-Control-Allow-Origin属性声明允许跨域访问。

    @WebFilter
    public class CorsFilter implements Filter {  
        // 日志对象
        private static Logger logger = LoggerFactory.getLogger(CorsFilter.class);  
        
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
            HttpServletResponse response = (HttpServletResponse) res;  
            response.setHeader("Access-Control-Allow-Origin", "*");  
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");  
            response.setHeader("Access-Control-Max-Age", "3600");  
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with");  
            chain.doFilter(req, res);  
        }  
        
        public void init(FilterConfig filterConfig) {
            // something init
        }  
        
        public void destroy() {
             // destroy something
        }  
    }  

    4.继承使用Spring Web中的CorsFilter

    import org.springframework.stereotype.Component;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    import java.util.Arrays;
    
    /**
     *  跨域访问配置
     *
     *  @author Garyond
     */
    @Component
    public class CustomCorsFilter extends CorsFilter {
    
        public CustomCorsFilter() {
            super(configurationSource());
        }
    
        private static UrlBasedCorsConfigurationSource configurationSource() {
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true);
            config.addAllowedOrigin("*");
            config.addAllowedHeader("*");
            config.setMaxAge(36000L);
            config.setAllowedMethods(Arrays.asList("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"));
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/v1/**", config);
            return source;
        }
    }


  • 相关阅读:
    jquery直接操作元素的方式
    ie6下,给a添加事件,如果事件中有http请求,将会无效
    一个Tahoma字体bug引发的思考—关于样式bug的分析流程
    用弧度画圆
    【译】OWIN: Open Web Server Interface for .NET
    【译】Dependency Injection with Autofac
    Asp.net Identity身份与权限体系设计
    winform 数据(双向)绑定 快速更新实体
    泛型与非泛型的区别。
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/michaelcnblogs/p/13287802.html
Copyright © 2011-2022 走看看