首页 > 其他分享 >SpringBoot解决跨域问题

SpringBoot解决跨域问题

时间:2023-09-15 13:22:23浏览次数:58  
标签:SpringBoot request response 域名 解决 请求 public 跨域

一、概述

  现在企业级的项目大多数都是前后端分离,加之微服务技术已经成熟,在日常的开发中就难免遇到跨域问题。

跨域指的是:浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。
a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的

  以下是解决跨域问题的示例

二、示例

  1.新建一个拦截器,在拦截器中设置跨域

public class CorsInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //表示接受任意域名的请求,也可以指定域名
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*");


        //这里可以不加,但是其他语言开发的话记得处理options请求
        /**
         * 非简单请求是对那种对服务器有特殊要求的请求,
         * 比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。
         * 都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,
         * 服务器允许之后,浏览器会发出正式的XMLHttpRequest请求
         */
        if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
            return true;
        }

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

  2.把拦截器加入到拦截器配置中

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Bean
    LoginInterceptor loginInterceptor() {
        return new LoginInterceptor();
    }

    @Bean
    CorsInterceptor corsInterceptor(){
        return new CorsInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 拦截全部路径,这个跨域需要放在最上面
         */
        registry.addInterceptor(corsInterceptor()).addPathPatterns("/**");
        //拦截全部
        registry.addInterceptor(loginInterceptor())
                .addPathPatterns("/api/v1/pri/*/*/**")//把所有的priv都拦截掉
                .excludePathPatterns("/api/v1/pri/user/login","api/v1/pri/user/register");//登录和注册不拦截
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

  总结:这样就算完成了一个简单的跨域了。

标签:SpringBoot,request,response,域名,解决,请求,public,跨域
From: https://www.cnblogs.com/tony-yang-flutter/p/17704819.html

相关文章

  • PPT| 精细化工行业数字化解决方案 P167
    本人从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.【智能制造数字化咨询】该PPT共167页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击右上角红色按钮关注+私信。......
  • SpringBoot拦截器和动态代理有什么区别?
    在SpringBoot中,拦截器和动态代理都是用来实现功能增强的,所以在很多时候,有人会认为拦截器的底层是通过动态代理实现的,所以本文就来盘点一下他们两的区别,以及拦截器的底层实现。1.拦截器拦截器(Interceptor)准确来说在SpringMVC中的一个很重要的组件,用于拦截Controller的请......
  • 开源gRPC 微服务系统 windows 编译问题及解决
    gRPC是google开发的一个开源rpc微服务框架,易用跨平台,官方网站上对linuxMac支持很好,给出了完善的编译解决方案,但是在windows上很难用特别是编译这部分,本文汇总下windows编译遇到的问题及解决方案:引用一个前人写的编译攻略,Windows+VS2017使用gRPC-我来乔23-博客园(cnblogs.com......
  • WebStorm 快捷键插入注释时,注释从开头开始,中间有许多空格的解决办法
    前言有些配置被乱改了,导致写代码时非常难受,我遇到的事儿是在vue模板中添加注释,之前都是在光标处插入的注释块,今天突然发现注释从开头开始插入了,中间还有一堆空格解决办法我们在vue中出现的问题,那我们就找vue的template模板中出现了问题,因为vue的template适合HTML有关联的,所以......
  • 使用HTTP爬虫ip中的常见误区与解决方法
    在如今的互联网时代,为了保障个人隐私和实现匿名浏览,许多人选择使用HTTP爬虫ip。然而,由于缺乏了解和使用经验,常常会出现一些误区。本文将为大家介绍使用HTTP爬虫ip过程中常见的误区,并提供相应的解决方法,帮助大家更好地使用HTTP爬虫ip并提高网络安全性。误区一:爬虫ip的选择只看速度高......
  • SpringBoot 自定义starter汇总
    1、SpringBootstarter机制SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息......
  • JAVA中的高并发,解决高并发的方案
    java高并发,如何解决,什么方式解决一、什么是高并发二、高并发的解决方法有两种三、追加一、什么是高并发1.1高并发(HighConcurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。1.2高并发相关常用的一些指标有响应时间......
  • SpringBoot打成jar运行后无法读取resources里的文件
    开发一个word替换功能时,因替换其中的内容功能需要word模版,就把word_replace_tpl.docx模版文件放到resources下在开发环境中通过下面方法能读取word_replace_tpl.docx文件,但是打成jar包在linux下运行后无法找到文件了Filefile=ResourceUtils.getFile(ResourceUtils.CL......
  • 商业综合体AI+视频安防监控与智能监管解决方案
    商业综合体AI+视频安防监控与智能监管解决方案原创2023-09-1416:22·TSINGSEE青犀视频一、方案背景商业综合体需要具备更好的品质和环境才能吸引更多客流,如何有效地进行内部管理、外部引流,是综合体管理人员思考的重点。传统的视频监控需要靠人盯牢屏幕或者发生报警后通过查......
  • 订单请求接口设计,避免timeout超时问题 下单解决
    订单请求接口设计,避免timeout超时问题下单解决接上篇:外部系统对接下单幂等性校验逻辑及接口超时处理https://www.cnblogs.com/oktokeep/p/17668039.html1.第一步中间表数据&取消接口两件事情分开,不要因为中间表缺失数据,而影响到取消的操作。2.第二步中间表数据兼容,不存在......