【SpringBoot】解决跨域问题

淩亂°似流年 2023-10-09 18:14 165阅读 0赞

Springboot版本:

2.7.8

跨域问题

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

怎么算跨域了

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

解决方式

加入一个配置类

  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.cors.CorsConfiguration;
  4. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
  5. import org.springframework.web.filter.CorsFilter;
  6. @Configuration
  7. public class CorsConfig {
  8. private CorsConfiguration buildConfig() {
  9. CorsConfiguration corsConfiguration = new CorsConfiguration();
  10. // 允许任何域名使用
  11. corsConfiguration.addAllowedOriginPattern("*");
  12. // 允许任何头
  13. corsConfiguration.addAllowedHeader("*");
  14. // 允许任何方法(post、get等)
  15. corsConfiguration.addAllowedMethod("*");
  16. corsConfiguration.setAllowCredentials(true);
  17. return corsConfiguration;
  18. }
  19. //下面两个方法二选一
  20. @Bean
  21. public CorsFilter corsFilter() {
  22. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  23. // 对接口配置跨域设置
  24. source.registerCorsConfiguration("/**", buildConfig());
  25. return new CorsFilter(source);
  26. }
  27. // 下面代码是将一个名为corsFilter的CorsFilter过滤器注册到Servlet容器中。具体来说,setOrder(-101)方法设置了该过滤器的执行顺序为最低优先级。当请求到达Web应用程序时,CorsFilter过滤器将首先被执行,以检查是否需要进行跨域请求的CORS处理。如果需要进行跨域请求的CORS处理,则CorsFilter过滤器将允许请求通过,否则将拒绝请求并返回错误响应。
  28. @Bean
  29. public FilterRegistrationBean corsFilterBean() {
  30. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  31. // 对接口配置跨域设置
  32. source.registerCorsConfiguration("/**", buildConfig());
  33. CorsFilter corsFilter = new CorsFilter(source);
  34. FilterRegistrationBean<CorsFilter> filterRegistrationBean = new FilterRegistrationBean<>(corsFilter);
  35. filterRegistrationBean.setOrder(-101);
  36. return filterRegistrationBean;
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,165人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Springboot解决问题

    (跨域资源共享)策略,允许跨域请求。常见的解决方法是在后端代码中添加CORS配置,允许特定的域名或所有域名的请求。可以使用Spring Boot提供的@CrossOrig...

    相关 springboot解决问题

        跨域是前后端分离,前端页面发起异步ajax请求,而浏览器因为同源策略导致请求失败,请求正确到了服务端,而且服务端也正常处理,只不过浏览器不认可,所以跨域问题的门槛是浏览