qq_41484229 2024-04-18 03:18 采纳率: 0%
浏览 43
已结题

已经配置了为什么还是有跨域问题,添加注解也是不生效

已经配置了为什么还是有跨域问题,添加注解也是不生效,谁能告诉我为什么呀

img

img

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-18 03:18
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,看起来您的Java Spring Boot应用在处理CORS(跨源资源共享)时遇到了问题。这里有几个可能的原因以及相应的解决方法:

    1. 配置文件位置错误:确保WebAppConfigurer类中的CORS配置被正确地加载。检查您的Spring Boot应用程序是否从正确的配置文件(例如application.ymlapplication.properties)中读取配置。如果是在application.yml中配置,应该像这样:
    spring:
      mvc:
        cors:
          allowed-origins: "*"
          allow-credentials: true
          allowed-methods: GET, HEAD, POST, PUT, DELETE, OPTIONS
          max-age: 3600
          allowed-headers: "*"
    

    如果您想保持现有的Java配置方式,确保@Configuration注解的类已经被Spring扫描到。通常情况下,将此类放在与主启动类同一个包下,或者子包下就可以自动扫描到。

    1. 注解未生效:确保您的Spring Boot应用启用了CORS支持。您可以在主启动类上添加@CrossOrigin注解,或者在Spring Boot的主配置类中启用CORS,例如:
    @SpringBootApplication
    @EnableWebMvc // 如果使用 @CrossOrigin,这行可能会导致冲突,可尝试移除
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    然后,在主启动类上添加@CrossOrigin注解:

    @SpringBootApplication
    public class DemoApplication {
    
        @CrossOrigin(origins = "*", maxAge = 3600)
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    
    1. 检查异常堆栈:您提供的错误信息表明请求失败,可能是由于网络原因。请检查服务器端日志,确认是否存在任何异常。如果有异常,提供具体的异常信息以便更好地分析。

    2. 确保正确处理响应头:在返回的HTTP响应中添加Access-Control-Allow-Origin头部。您可以创建一个过滤器或者拦截器来实现这个功能。这是一个简单的过滤器示例:

    import org.springframework.stereotype.Component;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    
    @Component
    public class CorsFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, accept, authorization");
    
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }
    

    然后在Spring Boot的主配置类中注册这个过滤器:

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.filter.CorsFilter;
    
    @Configuration
    public class WebConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            return new CorsFilter();
        }
    }
    

    请尝试这些步骤,看看能否解决您的问题。如果还有问题,请提供更多详细的错误信息或上下文,以便我能更准确地定位问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月9日
  • 创建了问题 4月18日

悬赏问题

  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)