博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud中如何实现跨域访问
阅读量:2058 次
发布时间:2019-04-29

本文共 2860 字,大约阅读时间需要 9 分钟。

注意:此总结基于Spring Boot 2.0.0.RELEASE

跨域相关知识学习

掘金上一位大佬分享的关于跨域的总结,总结得非常详细到位了,文章条理清晰,既有理论讲解,又有代码例举,强烈推荐阅读

https://juejin.im/post/5ba1d4fe6fb9a05ce873d4ad

Spring Boot中如何实现跨域访问

我们采用 CORS的方式来实现跨越访问,所以需要注意,IE 浏览器不能低于 IE10

为了实现跨域访问,我们要做的事情就是在响应头中添加允许跨域的相关字段,主要是以下几个

  • Access-Control-Allow-Origin,设置需要放行的其它源的地址,多个以逗号隔开,通常仅设置当前请求源的地址

    Access-Control-Allow-Origin: http://x.x.x.x:1,http://x.x.x.x:2
  • Access-Control-Max-Age,设置该Preflight请求缓存时间,在此时间内,该请求不需要再次发起Preflight请求,从而节省服务器性能,提升效率,单位为秒

    Access-Control-Max-Age: 21600
  • Access-Control-Allow-Headers,设置请求头中允许的字段,如果请求头中有一些特殊的字段,例如自定义字段,则响应头中需要设置此字段,否则不能请求成功,如无则不用设置,多个以逗号隔开

    Access-Control-Allow-Headers: token,timestamp
  • Access-Control-Allow-Methods,设置允许的请求方式,如无限制,可以不设置,多个以逗号隔开

    Access-Control-Allow-Methods: GET,POST

实现思路也很简单,我们需要做一个拦截器,这个拦截器的作用就是将我们要设置的字段添加进响应头中,然后通过java-base configuration的方式将拦截器添加进MVC的拦截器链中,把握这个思路,在非Spring Boot工程中,也可以很快地找到实现的方法。

  • 拦截器

    import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Arrays;import java.util.HashSet;import java.util.Set;/** * 用于支持跨域的拦截器 */public class CrossOriginInterceptor implements HandlerInterceptor {
    /** * 允许跨域的域名信息集合 */ private Set
    allowedOrigins; public CrossOriginInterceptor(String[] origins) {
    allowedOrigins = new HashSet<>(Arrays.asList(origins)); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    // 若允许跨域的域名信息集合中包含请求的域名信息,则在返回消息头中添加Access-Control-Allow-Origin String requestOrigin = request.getHeader("origin"); if (allowedOrigins.contains(requestOrigin)) {
    response.setHeader("Access-Control-Allow-Origin", requestOrigin); response.setHeader("Access-Control-Max-Age", "21600"); } return true; }}
  • java-base configuration

    import com.dongrui.study.mockserver.interceptors.CrossOriginInterceptor;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class WebAppConfigurator implements WebMvcConfigurer {
    @Value("${crossOrigin.origins}") private String[] origins; @Override public void addInterceptors(InterceptorRegistry registry) {
    // 添加用于支持跨域的拦截器 InterceptorRegistration registration = registry.addInterceptor(new CrossOriginInterceptor(origins)); registration.addPathPatterns("/**");// 所有路径都被拦截 registration.excludePathPatterns("/", "/login", "/error", "/static/**", "/logout");// 添加不拦截路径 }}

转载地址:http://optlf.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
查看>>
使用 GDB + Qemu 调试 Linux 内核
查看>>
介绍一个小工具:SSL-exporter
查看>>
深入理解 tc ebpf 的 direct-action (da) 模式(2020)
查看>>
为容器时代设计的高级 eBPF 内核特性(FOSDEM, 2021)
查看>>
Loki系列文章
查看>>
高并发、高可用、高可靠微服务架构7大顶级设计思维模型
查看>>
如何使用 registry 存储的特性
查看>>
凉了,stress 无论如何也无法打满 CPU
查看>>
个人学习方法分享
查看>>
时隔多年。。终于有一款云原生消息系统出仕了!
查看>>