教你用Java SpringBoot如何解决跨域

目录
  • 跨域
    • 什么是跨域
  • CORS
  • SpringBoot解决跨域方案
    • 1.使用@CrossOrigin注解
    • 2.Spring框架全局配置CORS配置
  • 具体实现
    • 1.使用@CrossOrigin注解
      • 1.1目录结构
      • 1.2运行结果
    • 2.使用@CrossOrigin注解
      • 2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置!
      • 2.3Spring Boot CORS 使用WebMvcConfigurer配置
      • 2.4CORS 使用Spring Security配置
  • 代码获取
  • 参考链接
  • 总结

跨域

什么是跨域

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

CORS

CORS(Cross-origin resource sharing-跨源资源共享)允许网页从其他域向浏览器请求额外的资源

SpringBoot解决跨域方案

1.使用@CrossOrigin注解

该注解添加在你想要让某接口允许跨域的的,类上面,或者实现方法上面。

该注解包含的属性:orgins,allowdHeaders,methods,exposedHeaders,allowCreden,maxAge。

2.Spring框架全局配置CORS配置

2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置!

2.2Spring Boot CORS 使用WebMvcConfigurer配置!

2.3CORS 使用Spring Security配置!

具体实现

1.使用@CrossOrigin注解

1.1目录结构

DemoApplication.java

package com.example.crossdomain.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

CorsTestController.java

package com.example.crossdomain.demo.controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/demo")
@RestController
@CrossOrigin("https://blog.csdn.net") // 只有指定域名可以访问该类下所有接口
public class CorsTestController {
    @GetMapping("/sayHello")
    public String sayHello(){
        return "Hello world";
    }
}

1.2运行结果

2.使用@CrossOrigin注解

2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置!

2.1.1目录结构

2.2.2添加CorsConfiguration.java

package com.example.crossdomain.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class CorsConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("GET", "POST");
    }
}

2.2.3运行结果

2.3Spring Boot CORS 使用WebMvcConfigurer配置

package com.example.crossdomain.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class CorsConfiguration
{
    @Bean
    public WebMvcConfigurer corsConfigurer()
    {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

2.4CORS 使用Spring Security配置

2.4.1目录结构

2.4.2添加WebSecurityConfig.java

package com.example.crossdomain.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import java.util.Arrays;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }
    @Bean
    CorsConfigurationSource corsConfigurationSource()
    {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");	//同源配置,*表示任何请求都视为同源,若需指定ip和端口可以改为如“localhost:8080”,多个以“,”分隔;
        corsConfiguration.addAllowedHeader("*");//header,允许哪些header,本案中使用的是token,此处可将*替换为token;
        corsConfiguration.addAllowedMethod("*");	//允许的请求方法,PSOT、GET等
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration);
        return source;
    }
}

2.4.3运行结果

代码获取

码云

参考链接

什么是跨域?跨域解决方法

Spring boot 入门之CORS 跨域配置详解

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java SpringBoot快速集成SpringBootAdmin管控台监控服务详解

    目录 1.初识SpringBootAdmin 2.搭建服务端--POM文件中添加相关依赖 3.修改服务端application启动类 4.配置security安全信息 5.启动server服务端 6.搭建client客户端 总结 SpringBootAdmin是一个针对 Spring Boot 的 Actuator 接口进行 UI 美化封装的监控工具,它可以在列表中浏览所有被监控 spring-boot 项目的基本信息.详细的 Health 信息.内存信息.JVM 信息.垃圾回收信息.各种配置信

  • Java的springcloud Sentinel是什么你知道吗

    目录 Sentinel 是什么? 概述 Sentinel 的历史: 历史 Sentinel 分为两个部分: 两部分 基本概念及作用 基本概念: 主要作用: Sleuth 概述 zipkin分布式监控客户端 基本概念 总结 Sentinel 是什么? 概述 分布式系统的流量防卫兵 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级系统负载保护等多个维度保护服务的稳定性. Sentinel 的历史: 历史 2012 年,Sentinel 诞

  • Java之springcloud Sentinel案例讲解

    一.Sentinel是什么? Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案. 它以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来保护服务的稳定性. 二.使用步骤 1.下载地址 下载地址:https://github.com/alibaba/Sentinel/releases java -jar sentinel-dashboard-1.7.0.jar 访问:http://localhost:8080 用户名密码:sentinel/sen

  • Java SpringBoot整合SpringCloud

    目录 1. SpringCloud特点 2. 分布式系统的三个指标CAP 3. Eureka 4. SpringCloud Demo 4.1 registry 4.2 api 4.3 provider 4.4 consumer 4.5 POSTMAN一下 1. SpringCloud特点 SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况: 分布式/版本化配置 服务注册和发现 Eureka 路由 Zuul 服务到服务的呼叫 负载均衡 Ribbon 断路器 H

  • Java SpringBoot安全框架整合Spring Security详解

    目录 1.工业级安全框架介绍 2.建议搭建Spring Security环境 2.1在pom.xml中添加相关依赖 2.2创建Handler类 2.3创建简单的html和配置相关thymeleaf的路径 2.4最后再加个启动类,那么我们的整合测试就完成勒 2.5成果展示 用户名默认user,密码则随机生成的这串数字 3.进阶版使用 3.1用户名和密码自定义 3.2在config包下创建Encoder 3.3赋予账号角色权限 总结 1.工业级安全框架介绍 Spring Security基于Spri

  • Java Springboot的目的你知道吗

    目录 Spring-boot目的 Spring如何简化开发 第一个spring-boot程序 总结 Spring-boot目的 Spring是为了解决企业应用开发的复杂性而创建的,简化开发 Spring如何简化开发 1.基于POJO的轻量级和最小侵入性编程 2.通过IOC,依赖注入(DI)和面向接口实现松耦合 3.基于(AOP)和惯例进行声明式编程 4.基于切面和模板减少样式代码 微服务 第一个spring-boot程序 官方提供了一个快速生成的网站!idea集成了这个网站 1可以在官网下载后,

  • Java之Springcloud Gateway内置路由案例讲解

    Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spring Cloud Gateway中内置了很多路由断言工厂类.不同的断言工厂类针对HTTP请求的不同属性.多个断言工厂类可以使用逻辑"and"进行组合使用. 4.1 After Route Predicate Factory        这个Predicate工厂的实现类是AfterRoutePredicateFactory,使用一个时间参数,如果当前请求的时间在配置的赶时间之后,

  • 一篇文章教你将JAVA的RabbitMQz与SpringBoot整合

    目录 一.fanout:发布订阅型 二.direct:直连型 三.topic:通配符模式 四.消费者端接收消息 总结 本文主要聊SpringBoot整合RabbitMQ,主要分为生产者和消费者两个工程,目录结构如下: 先简单说一下RabbitMQ的一些核心概念: 1.虚拟主机vhost:vhost是物理隔离的,你可以将vhost看作是一个个小型的RabbitMQ 2.交换机exchange:生产者发送的消息不是直接到达队列的,而是交换机,然后交换机再根据路由key,路由到指定的队列,可以理解为一

  • 一篇文章带你了解Java SpringBoot四大核心组件

    目录 一.Spring Boot Starter 1.1 Starter的应用示例 二.Spring Boot Autoconfigure 2.1 autoconfigure 简介 三.Spring Boot CLI 四.Spring Boot actuator 总结 一.Spring Boot Starter 1.1 Starter的应用示例 <dependency> <groupId>org.springframework.boot</groupId> <ar

  • Java SpringBoot启动指定profile的8种方式详解

    目录 配置文件中设置 命令行设置 IDEA中设置 1.program arguments程序参数 2.VM options虚拟机参数 3.Active profiles 参数 遇到的问题 总结 配置文件中设置 通常在公司级别的项目中,我们可能会写多个application- dev/prod.yml ,然后我们通常会在application.yml配置文件中写入 spring: profiles: active: dev 这里会指定激活的profile是application- dev.yml

  • 深入理解Java SpringCloud Ribbon 负载均衡

    目录 前言 1.抛出问题 2.源码解析 2.1.LoadBalancerIntercepor 2.2.LoadBalancerClient 2.3.负载均衡策略IRule 2.4.总结 3.负载均衡策略 总结 前言 该技术博客是关于黑马视频教程的笔记总结! 服务消费者需要通过RestTemplate调用注册中心(Eureka)的服务提供者,但当同一服务名称的服务有多个的时候,我们的服务消费者应该调用哪一个服务呢?这时候就需要我们学习理解Ribbon负载均衡的实现原理. 当我们在RestTempl

  • Java springboot yaml语法注解

    目录 yaml语法注解 配置文件 两种形式 YAML: 总结 yaml语法注解 配置文件 两种形式 application.properties和.yaml 第一种语法 key=value 第二种key:空格value 作用用来修改spring默认的配置 YAML: YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language&

随机推荐