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

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(3350)   2023-03-28 11:29:14

引言

    在Java 编程中,web项目还是经常遇到一些跨域的使用。这里主要记录几种spring框架,spring boot中的一些常见的几种配置跨域的方法。

    CORS(Cross-origin resource sharing-跨源资源共享)允许网页从其他域向浏览器请求额外的资源,例如 字体,CSS或来自CDN的静态图像。 CORS有助于将来自多个域的网页内容提供给通常具有相同安全策略的浏览器。 在这个例子中,我们将学习如何在Spring MVC应用程序的方法和全局级别启用CORS支持。

一.spring框架中使用@CrossOrigin注解方法级CORS

    Spring MVC提供了@CrossOrigin注解。 这个注释标注了注释的方法或类型,允许跨源请求。

    默认情况下,@CrossOrigin允许所有的来源,所有的头文件,@RequestMapping注解中指定的HTTP方法和30分钟的maxAge。 您可以覆盖这些赋予注释属性值的设置:
 
属性 说明
origins 允许的来源列表. 他的值放置在HTTP协议的响应header的Access-Control-Allow-Origin .
– – 意味着所有的源都是被允许的。
– 如果未定义,则允许所有来源。
allowedHeaders 实际请求期间可以使用的请求标头列表. 值用于预检的响应header Access-Control-Allow-Headers。
– – 意味着允许客户端请求的所有头文件。
– 如果未定义,则允许所有请求的headers。
methods 支持的HTTP请求方法列表。 如果未定义,则使用由RequestMapping注释定义的方法。
exposedHeaders 浏览器允许客户端访问的响应头列表。 在实际响应报头Access-Control-Expose-Headers中设置值。
– 如果未定义,则使用空的暴露标题列表。
allowCredentials 它确定浏览器是否应该包含与请求相关的任何cookie。
– false – cookies 不应该包括在内。
– "" (空字符串) – 意味着未定义.
– true – 预响应将包括值设置为true的报头Access-Control-Allow-Credentials。
– 如果未定义,则允许所有凭据。
maxAge 预响应的高速缓存持续时间的最大时间(以秒为单位)。 值在标题Access-Control-Max-Age中设置。
– 如果未定义, 最大时间设置为1800秒(30分钟).

1.1@CrossOrigin Class/Controller Level

@CrossOrigin(origins = "*", allowedHeaders = "*")
@Controller
public class HomeController
{
    @GetMapping(path="/")
    public String homeInit(Model model) {
        return "home";
    }
}

1.2@CrossOrigin at Method Level

@Controller
public class HomeController
{
    @CrossOrigin(origins = "*", allowedHeaders = "*")
    @GetMapping(path="/")
    public String homeInit(Model model) {
        return "home";
    }
}

1.3 @CrossOrigin Overridden at Method Level

homeInit()方法只能从域http://example.com访问。 其他方法在HomeController中将可以从所有域访问。
@Controller
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class HomeController
{
    @CrossOrigin(origins = "http://example.com")
    @GetMapping(path="/")
    public String homeInit(Model model) {
        return "home";
    }
}

二.Spring框架全局CORS 配置

2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置

要为整个应用程序启用CORS,请使用WebMvcConfigurerAdapter 添加 CorsRegistry
@Configuration
@EnableWebMvc
public class CorsConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("GET", "POST");
    }
}

2.2Spring Boot CORS 使用WebMvcConfigurer配置

在spring boot应用程序中,建议只声明一个WebMvcConfigurer bean。
@Configuration
public class CorsConfiguration
{
    @Bean
    public WebMvcConfigurer corsConfigurer()
    {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

2.3CORS 使用Spring Security配置

要通过Spring安全性启用CORS支持,请配置CorsConfigurationSource bean并使用HttpSecurity.cors() 配置。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
            //other config
    }
 
    @Bean
    CorsConfigurationSource corsConfigurationSource()
    {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}
地址:https://www.leftso.com/article/303.html

相关阅读

spring boot又一个spring框架的经典项目,本文讲解spring boot入门的环境配置以及第一个项目,Spring Boot 入门教程
spring boot入门,spring boot是一个崭新的spring框架分支项目,本文讲解其属性配置相关
spring boot是一个崭新的spring框架分支项目,本文讲解基本的数据库配置
spring boot是一个崭新的spring框架分支项目,本文讲解spring boot中controller的常用注解使用
Spring boot 入门之CORS 跨域配置详解,spring 跨域配置详解。
Spring Boot 入门 AOP 日志处理,这里主要讲解spring boot 中采用AOP方式进行日志的统一处理。spring 框架的处理也是一样。综合来讲,本文主要讲解了spring b...
spring boot 入门 使用spring.profiles.active来分区配置,,在spring boot中可以存在多个环境的配置文件通过配置spring.profiles.activ...
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
在本教程中,学习从spring boot 入门应用程序创建和使用RSS和Atom提要。 您必须在各种网站上(例如我们的RSS提要)以文本或图像按钮的形式看到这一点,邀请您“通过RSS订阅”。RS...
java编程中spring框架5.0介绍说明/概述,spring5,spring框架,java编程