过滤器和拦截器处理跨域问题

过滤器和拦截器处理跨域问题

1、过滤器,固定格式,只需要添加下面的配置类即可

  • 添加依赖,这个依赖一般创建项目时就自动添加了
<!-- For Maven -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

  • 实现
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;

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        // 创建 CorsConfiguration 对象并设置配置属性
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用,生产环境中应配置具体域名
        corsConfiguration.addAllowedHeader("*"); // 允许任何头
        corsConfiguration.addAllowedMethod("*"); // 允许任何方法(POST、GET 等)
        corsConfiguration.setAllowCredentials(true); // 允许请求携带验证信息,如 HTTP 认证或 cookie
        corsConfiguration.setMaxAge(3600L); // 设置预检请求的缓存时间为 3600 秒(1 小时)

        // 使用 UrlBasedCorsConfigurationSource 将配置应用到特定路径
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration); // 对所有路径应用配置

        // 创建并返回 CorsFilter
        return new CorsFilter(source);
    }
}
  • CorsConfiguration是 Spring 提供的一个现成的类,用于配置跨域请求的相关设置。不需要我们自己实现
  • UrlBasedCorsConfigurationSource这是 Spring 提供的一个类,用于将 CorsConfiguration 应用于特定的 URL 路径。
  • CorsFilter这是 Spring 提供的一个过滤器,用于处理跨域请求。

2、拦截器,在配置类中重写addCorsMappings方法

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")// 应用CORS策略到所有的路径
                .allowedOriginPatterns("*")// 允许所有域名进行跨域请求,使用通配符"*",不推荐在生产环境
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD")// 允许的HTTP方法
                .allowCredentials(true)// 允许请求带有验证信息,如HTTP认证或cookie
                .maxAge(3600)// 预检请求的结果能够被缓存多长时间(以秒为单位)
                .allowedHeaders("*");// 允许所有头信息,通配符"*"表示接受任何请求头
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值