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


  • 相关阅读:
    基于Python实现的死链接自动化检测工具
    MySQL 慢查询日志配置与简析
    Git 常用命令及操作总结
    redis redis常用命令及内存分析总结(附RedisClient工具简介
    Jenkins Jenkins结合GIT Maven持续集成环境配置
    JAVA TestNG单元测试详解
    MyEclipse TestNG插件安装与配置
    JAVA 利用MyEclipse结合TestNG测试框架进行单元测试
    lintcode :前序遍历和中序遍历树构造二叉树
    lintcode: 中序遍历和后序遍历树构造二叉树
  • 原文地址:https://www.cnblogs.com/michaelcnblogs/p/13287802.html
Copyright © 2020-2023  润新知