当前位置: 首页 > article >正文

Spring boot处理跨域问题

Spring boot处理跨域问题

    • 方案一
    • 方案二
    • 推荐解决方案
    • 注意

方案一

实现WebMvcConfigurer的addCorsMappings方法

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowCredentials(true).maxAge(3600);
    }
}

方案二

通过滤器进行全局设置

@Component
public class CorsFilter implements Filter {

    static final String OPTIONS = "OPTIONS";

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        // 允许指定域访问跨域资源
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 允许所有请求方式
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
        // 有效时间
        response.setHeader("Access-Control-Max-Age", "3600");
        // 允许的header参数
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,satoken");
        
        // 如果是预检请求,直接返回
        if (OPTIONS.equals(request.getMethod())) {
            response.getWriter().print("");
            return;
        }

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}

推荐解决方案

后端项目中配置耦合度较高,建议在nginx中配置。可以在nginx配置文件中加入以下配置:

location / {
        # 配置跨域响应头
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT, HEAD';
        
        # 其他配置...
    }

注意

Access-Control-Allow-Origin 这个参数的值尽量不要设置成‘*’,会带来安全漏洞。攻击者可以从恶意网站跨域读取受害网站的敏感信息,所以我们需要把值设置为具体的受信任的域。

假设后端接口所在域为 http://blog.zhangsan.com,那么我们就可以把Access-Control-Allow-Origin的值设置为http://blog.zhangsan.com。


http://www.kler.cn/a/455359.html

相关文章:

  • flask后端开发(2):URL与视图
  • ES 磁盘使用率检查及处理方法
  • 【生产问题记录-Mysql分区】
  • Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
  • 数学建模助力干细胞研究,配体纳米簇如何影响干细胞命运
  • 去除 el-input 输入框的边框(element-ui@2.15.13)
  • linux攻防
  • LeetCode - Google 校招100题 第5天 双指针(Two Pointers) (11题)
  • EKF 自动匹配维度 MATLAB代码
  • 【模电刷题复习--选择】
  • 23. 贪吃蛇
  • 三维激光扫描及逆向工程-构建复杂工业产品模型
  • 删除拼排序链表中的重复元素(最优解)
  • [python SQLAlchemy数据库操作入门]-13.集成Pandas:强大的数据分析工具
  • Ubuntu20.04安装FastRTPS,报错没有fastrtps-config.cmake
  • Spring Boot 实战:构建一个简单的 Web 应用
  • PyTorch Lightning模块介绍
  • 在 Vue3 项目中安装和配置 Three.js
  • 磁盘 IO 报警,MySQL 读写哪个文件慢了?
  • C语言简单测试总结
  • 复习打卡大数据篇——Hadoop MapReduce
  • MySQL 高级操作全解析
  • EXCEL中给某一列数据加上双引号
  • 题解:CF286A Lucky Permutation
  • wangEditor富文本插件在vue项目中使用和媒体上传的实现
  • provider-10000模块、consumer-80[RestTemplate远程调用]