spring 跨域 Cors 解决方案

3 篇文章 0 订阅

目录

一、@CrossOrigin

二 、@addCrosMapping

三、CrosFilter

四、Spring Security 跨域处理方案


一、@CrossOrigin

        spring 中第一种跨域的方式是通过 @CrossOrigin 注解来标记支持跨域,该组件可以添加在方法上,也可以添加在 Controller 上。当添加在 Controller上时,表示 Controller中所有接口都支持跨域,具体配置如下:

@RestController
// 放在类上表示当前类的所有接口都支持跨域 
@CrossOrigin(origins = {"http://localhost:63342"}) 
public class IndexController {

    @GetMapping("/demo")
    /**
     *  origins : 表示允许哪些域进行跨域操作 * 代表所有域 
     *  
     */
    @CrossOrigin(origins = {"http://localhost:63342"})
    public String demo(){
        System.out.println("demo ok !");
        return "demo ok !";
    }
}

@CrossOrigin 注解各属性含义如下:

  • alowCredentials :浏览器是否应当发送凭证信息,如 Cookie。
  • allowedHeaders:请求被允许的请求头字段,* 表示所有字段。
  • exposedHeadrs :哪些响应头可以作为响应的一部分暴露出来。

注意,这里只可以一一列举,通配符 * 在这里是无效的

  • maxAge :预检请求的有效期,有效期内不必再次发送预检请求,默认是1800 秒。
  • methods:允许的请求方法,* 表示允许所有方法。
  • origins:允许的域,* 表示允许所有域。

二、@addCrosMapping

        @CrossOrigin 注解需要添加在不同的 Controller 上。所以还有一种全局配置方法,就是通过重写 WebMvcConfiurerCompsite # addCorsMappings方法来实现,具体配置如下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 通过修改 WebMvc 配置设置为跨域 ,底层是通过 Interceptor 实现
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 处理请求的路径
                .allowCredentials(false) // 是否生成凭证
                .allowedHeaders("*") // 允许携带哪些请求头信息 
                .allowedMethods("*") // 允许哪些方法
                .allowedOrigins("*") // 允许哪些域进行方法 
                .exposedHeaders() // 响应哪些响应头信息 
                .maxAge(3600); // 预检请求的时长 

    }
}

三、CrosFilter

        CosrFilter 是 Spring Web 中提供的一个处理跨域的过滤器,开发者也可以通过该过滤器处理跨域。

@Configuration
public class WebMvcConfig2{

    /**
     *  过滤器注册器
     * @return  返回一个Cors过滤器
     */
    @Bean
    FilterRegistrationBean<CorsFilter> corsFilter (){
        // 过滤器注册器 
        FilterRegistrationBean<CorsFilter> corsFilterFilterRegistrationBean= new FilterRegistrationBean<>();
        // Cors配置类 
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(false); // 是否返回时生成凭证
        corsConfiguration.setAllowedHeaders(Arrays.asList("*")); // 允许请求携带哪些请求头信息
        corsConfiguration.setAllowedMethods(Arrays.asList("*")); // 允许哪些类型的请求方法
        corsConfiguration.setAllowedOrigins(Arrays.asList("*")); // 允许哪些域可以进行方法
        corsConfiguration.setMaxAge(3600L); // 设置预检的最大的时长
        corsConfiguration.setExposedHeaders(Collections.emptyList()); // 设置返回暴露的响应头信息
    
        // 设置注册URL 配置类 
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource() ;
        source.registerCorsConfiguration("/**",corsConfiguration);
        
        // 注册Filter 
        corsFilterFilterRegistrationBean.setFilter(new CorsFilter(source));
        corsFilterFilterRegistrationBean.setOrder(-1); // 设置 Filter的执行顺序 -1 表示最先执行,如果有其他的也配置-1 则以类加载为准
        return corsFilterFilterRegistrationBean;  
    }
}

四、Spring Security 跨域处理方案

CORS 跨域一篇文章就够了!Spring + Spring Security 配置!!_千城丶Y的博客-CSDN博客

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,我们可以使用CORS(Cross-Origin Resource Sharing)机制来解决跨域问题。CORS是一种机制,允许Web应用程序从不同的域访问其资源。下面是一种使用Spring框架实现CORS的方式: 1. 创建一个类来配置CORS: ``` @Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*"); } }; } } ``` 在上述代码中,我们使用了Spring的@Configuration注解来声明一个Java配置类,然后创建了一个名为CorsConfig的类。该类中我们使用了@Bean注解来声明一个名为corsConfigurer的方法,该方法返回一个WebMvcConfigurer对象。在该方法中,我们使用了WebMvcConfigurerAdapter类来扩展Spring MVC的配置,并重写了addCorsMappings()方法来配置CORS。我们使用了registry.addMapping()方法来配置允许跨域访问的URL和HTTP方法,这里我们设置了允许所有URL("**")和所有HTTP方法(GET、POST、PUT、DELETE、OPTIONS),同时也允许所有请求头。 2. 在Controller中使用@CrossOrigin注解: 我们也可以在Controller中直接使用@CrossOrigin注解来配置CORS,例如: ``` @RestController public class MyController { @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE, RequestMethod.OPTIONS}) @GetMapping("/hello") public String hello() { return "Hello World!"; } } ``` 在上述代码中,我们使用了Spring的@RestController注解来声明一个RESTful Controller,并在其中使用了@GetMapping注解来声明一个GET请求的处理方法。在该方法中,我们使用了@CrossOrigin注解来配置CORS,允许所有域名("*")进行跨域访问。 需要注意的是,为了安全起见,应该尽量限制允许跨域访问的域名和方法,避免出现安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值