SpringBoot解决跨域问题

方法一、spring boot中只用在Controller类上添加一个“@CrossOrigin“注解就可以实现对当前controller 的跨域 访问了,当然这个标签也可以加到方法上。

@CrossOrigin(origins = "http://192.168.1.10:8080", maxAge = 3600)
@RequestMapping("rest_index")
@RestController
public class IndexController{

}

其他controller类继承以上这个类就可以解决跨域问题。

注意:“@CrossOrigin“注解要求jdk1.8以上版本

方法二、基于WebMvcConfigurerAdapter配置加入Cors的跨域(常用)

 

import org.springframework.context.annotation.Configuration; 

import org.springframework.web.servlet.config.annotation.CorsRegistry; 

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 

public class CorsConfig extends WebMvcConfigurerAdapter { 
    
    /**
    * 就是注册的过程,注册Cors协议的内容。
    * 如: Cors协议支持哪些请求URL,支持哪些请求类型,请求时处理的超时时长是什么等。
    */
    @Override 

    public void addCorsMappings(CorsRegistry registry) { 
    
        registry.addMapping("/**") // 所有的当前站点的请求地址,都支持跨域访问

               .allowedOriginsPatterns("*") // 所有的外部域都可跨域访问。 如果是localhost则很难配置,因为在跨域请求的时候,外部域的解析可能是localhost、127.0.0.1、主机名(注意:SpringBoot2.4.0之后【allowedOriginsPatterns】代替【allowedOrigins】)
            
               .allowCredentials(true) // 是否支持跨域用户凭证

               .allowedMethods("GET", "POST", "DELETE", "PUT") // 当前站点支持的跨域请求类型是什么
            .maxAge(3600)
         .allowedHeaders("*");
; // 超时时长设置为1小时。 时间单位是秒  } }

 

方法三、创建一个filter(过滤器)解决跨域(也支持springMVC)

 

@Component

public class SimpleCORSFilter implements Filter {

    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, HEAD");

        response.setHeader("Access-Control-Max-Age", "3600");

        response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");

        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

四、使用nginx反向代理服务器解决跨域问题

  原文入口

很好的文章:阮一峰:http://www.ruanyifeng.com/blog/2016/04/cors.html

 

posted @ 2021-01-06 21:24  潜跃  阅读(2329)  评论(0编辑  收藏  举报