浅谈spring-boot 允许接口跨域并实现拦截(CORS)

发布时间 - 2026-01-11 02:51:49    点击率:

本文介绍了spring-boot 允许接口跨域并实现拦截(CORS),分享给大家,也给自己留个笔记

pom.xml(依赖的jar)

// 在spring-boot-starter-web的启动器中,已经依赖好了
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>

CORS跨域的配置(主要配置允许什么样的方法跨域)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Msater Zg on 2017/4/3.
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("*")
        .allowCredentials(true)
        .allowedMethods("GET", "POST", "DELETE", "PUT")
        .maxAge(3600);
  }
  private CorsConfiguration buildConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    List<String> list = new ArrayList<>();
    list.add("*");
    corsConfiguration.setAllowedOrigins(list);
    /*
    // 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
    */
    corsConfiguration.addAllowedOrigin("*"); 
    corsConfiguration.addAllowedHeader("*"); 
    corsConfiguration.addAllowedMethod("*"); 
    return corsConfiguration;
  }
  @Bean
  public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", buildConfig());
    return new CorsFilter(source);
  }
}

拦截器配置(可以根据不同路径,配置不同的拦截器)

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Created by Msater Zg on 2017/4/5.
 * 拦截器
 */
public class ApiInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    // 请求前调用
    System.out.println("拦截了");
    return true;
  }
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    // 请求过程中调用
    System.out.println("拦截了");
  }
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    // 请求完成时调用
    System.out.println("拦截了");
  }
}

拦截器管理类,用于生成项目的拦截器链

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by Msater Zg on 2017/4/5.
 * 拦截器管理工具
 */
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链
    // addPathPatterns 用于添加拦截规则
    // excludePathPatterns 用户排除拦截
    registry.addInterceptor(new ApiInterceptor()).addPathPatterns("/user/**"); //对来自/user/** 这个链接来的请求进行拦截
    super.addInterceptors(registry);
  }
}

结语

实现跨域的方式有很多,这只是其中一种。有什么不对的地方希望能及时指出。谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot  # cors跨域拦截  # springboot  # 跨域  # 接口跨域  # Apache中配置支持CORS(跨域资源共享)实例  # JS跨域解决方案之使用CORS实现跨域  # js实现跨域的几种方法汇总(图片ping、JSONP和CORS)  # Node.js设置CORS跨域请求中多域名白名单的方法  # vue+springboot实现项目的CORS跨域请求  # 浅谈Koa2框架利用CORS完成跨域ajax请求  # 跨域解决之JSONP和CORS的详细介绍  # C# WebApi CORS跨域问题解决方案  # react中fetch之cors跨域请求的实现方法  # 跨域(CORS)问题的解决方案分享  # 拦截器  # 有什么  # 好了  # 多个  # 有很多  # 希望能  # 给大家  # 三种  # 这只  # 自定义  # 能带  # 可以根据  # 也给  # 你也可以  # 大家多多  # 留个  # 管理类  # 过程中  # 器中  # util 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何实现本地化和多语言支持?(i18n教程)  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  简历在线制作网站免费版,如何创建个人简历?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  如何快速上传建站程序避免常见错误?  再谈Python中的字符串与字符编码(推荐)  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  利用python获取某年中每个月的第一天和最后一天  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  原生JS实现图片轮播切换效果  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何获取免费开源的自助建站系统源码?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  焦点电影公司作品,电影焦点结局是什么?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  香港服务器租用费用高吗?如何避免常见误区?  WordPress 子目录安装中正确处理脚本路径的完整指南  如何有效防御Web建站篡改攻击?  详解Huffman编码算法之Java实现  Android滚轮选择时间控件使用详解  Laravel如何升级到最新版本?(升级指南和步骤)  php json中文编码为null的解决办法  在线教育网站制作平台,山西立德教育官网?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  微信小程序 配置文件详细介绍  Bootstrap整体框架之JavaScript插件架构  北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何登录建站主机?访问步骤全解析  长沙做网站要多少钱,长沙国安网络怎么样?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何使用查询构建器?(Query Builder高级用法)  Android利用动画实现背景逐渐变暗  如何撰写建站申请书?关键要点有哪些?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何记录自定义日志?(Log频道配置)  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何快速搭建二级域名独立网站?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】