首页 > 其他分享 >SpringBoot自定义拦截器和跨域配置冲突的问题

SpringBoot自定义拦截器和跨域配置冲突的问题

时间:2023-03-01 16:33:19浏览次数:50  
标签:拦截器 SpringBoot corsConfiguration 配置 跨域 public 自定义

跨域配置完成以后,又进行拦截器的配置,发现跨域配置失效,以下是原配置

@Configuration
public class CORSConfig implements WebMvcConfigurer {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*") // 允许所有请求来源
                        .allowedMethods("*") // 允许的请求类型
                        .allowCredentials(true)
                        .allowedHeaders("*");
            }
        };
    }
}

经过了解和排查发现,当有请求发送到后台时,先被自定义拦截器拦截,如果拦截器验证没有问题,才会开始执行跨域配置。

因此解决办法是让跨域配置在自定义拦截器之前执行。而Filter的执行顺序大于自定义拦截器,因此可以在Filter中实现跨域的配置。

修改之后的跨域配置:修改为过滤器配置跨域

@Configuration
public class CorsConfig {

    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
//        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

 

标签:拦截器,SpringBoot,corsConfiguration,配置,跨域,public,自定义
From: https://www.cnblogs.com/wongzzh/p/17168759.html

相关文章

  • SpringBoot Actuator RCE 漏洞总结
    一、SpringBootenv获取*敏感信息 当我们直接访问springboot站点时,可以看到某些password字段填充了*通过${name}可以获取明文字段  2.配置不当导致敏感信息......
  • 纯代码实现用户添加自定义头像功能
    WordPress系统默认使用Gravatar头像,对国内用户来说很不友好,要实现本地上传自定义头像功能,安装插件SimpleLocalAvatars即可,也可以把这个插件的功能代码移植到主题。插件......
  • VSCode通过snippet generator生成自定义代码片段
    在线地址:https://snippet-generator.app/ 在VSCode左下角设置中找到“用户代码片段”进行添加  删除代码片段文件创建后会一直保存在本地电脑中,无法直接在VSCod......
  • zabbix自定义监控项
    zabbix通过snmp自定义监控项链接问题解决:1.提示“NoSuchInstancecurrentlyexistsatthisOID”**办法:**还有一个需要注意的点就是,我们添加了单个指标的监控......
  • .NET 7 和 C# 11 的 7 大自定义扩展方法
    .NET7和C#11的7大自定义扩展方法原创2023-01-1311:59·启辰8 介绍自从我开始了解扩展方法以来,我不断地发现新的可能性,让我的编码生活更轻松。扩展方法是S......
  • 编译PHP 7.3扩展引入自定义的C++库
    这里以mac为例,linux环境也是类似的。这里只是粗略的修改及编译过程,不会有太多详细过程。在https://www.php.net/downloads或者https://github.com/php/php-src/releases下......
  • springboot 自动装配之@ConditionalOnClass,@ConditionalOnMissingClass
    @ConditionalOnClass表示如果有后面的类,那么就加载这个自动配置@ConditionalOnMissingClass如果没有后面的类,才自动配置这2个注解对实现自动配置很重要。@Configuration......
  • mybatis:自定义映射关系resultMap
    创建表t_emp定义实体类packageorg.example.entity;publicclassEmp{privateIntegerempId;privateStringempName;privateIntegerage;pr......
  • 自定义异常
    自定义异常packagecom.andy.base.exception.demo01.demo02;//自定义的异常类publicclassMyExceptionextendsException{//传递数字>10;privateintde......
  • SpringBoot整合Spring Security
    1快速入门在项目中直接引入SpringSecurity的依赖<!--springSecurity--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo......