请求后端接口报错:IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain ...

墨蓝 2024-02-18 13:22 123阅读 0赞

目录

    • 一、问题
    • 二、报错信息
    • 三、WebMvcConfigurer
    • 四、原因
    • 五、解决

一、问题

请求后端接口时出现异常


二、报错信息

  1. java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.
  2. at org.springframework.web.cors.CorsConfiguration.validateAllowCredentials(CorsConfiguration.java:473)
  3. at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:532)
  4. at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1265)
  5. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1047)
  6. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
  7. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  8. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  9. at javax.servlet.http.HttpServlet.service(HttpServlet.java:670)
  10. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  11. at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
  12. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
  13. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
  14. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
  15. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
  16. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
  17. at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
  18. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
  19. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
  20. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
  21. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
  22. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
  23. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
  24. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177)
  25. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
  26. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
  27. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
  28. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
  29. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
  30. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
  31. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
  32. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
  33. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891)
  34. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784)
  35. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  36. at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
  37. at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  38. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  39. at java.lang.Thread.run(Thread.java:748)

三、WebMvcConfigurer

  1. @Configuration
  2. @EnableWebMvc
  3. @ComponentScan
  4. public class WebMvcConfiguration implements WebMvcConfigurer {
  5. private String fileBasePath = "xxx/xxx";
  6. @Override
  7. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  8. registry.addResourceHandler("/upload/**").addResourceLocations("file:" + fileBasePath + File.separator);
  9. }
  10. @Bean
  11. public ViewResolver viewResolver() {
  12. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  13. resolver.setPrefix("/WEB-INF/");
  14. resolver.setSuffix(".jsp");
  15. resolver.setViewNames("jsp/*");
  16. resolver.setOrder(2);
  17. return resolver;
  18. }
  19. @Bean
  20. public ITemplateResolver templateResolver() {
  21. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  22. templateResolver.setTemplateMode("HTML5");
  23. templateResolver.setPrefix("/WEB-INF/");
  24. templateResolver.setSuffix(".html");
  25. templateResolver.setCharacterEncoding("utf-8");
  26. templateResolver.setCacheable(false);
  27. return templateResolver;
  28. }
  29. @Bean
  30. public SpringTemplateEngine templateEngine() {
  31. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  32. templateEngine.setTemplateResolver(templateResolver());
  33. return templateEngine;
  34. }
  35. @Bean
  36. public ThymeleafViewResolver viewResolverThymeLeaf() {
  37. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  38. viewResolver.setTemplateEngine(templateEngine());
  39. viewResolver.setCharacterEncoding("utf-8");
  40. viewResolver.setViewNames(new String[] {
  41. "thymeleaf/*" });
  42. viewResolver.setOrder(1);
  43. return viewResolver;
  44. }
  45. @Override
  46. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  47. configurer.enable();
  48. }
  49. @Override
  50. public void addCorsMappings(CorsRegistry registry){
  51. registry.addMapping("/**")
  52. //问题出现在这一行,上面的配置可以忽略
  53. .allowedOrigins("*")
  54. .allowedMethods("*")
  55. .allowedHeaders("*")
  56. .allowCredentials(true)
  57. .maxAge(3600);
  58. }
  59. }

四、原因

SpringBoot升级2.4.0之后,跨域配置中的.allowedOrigins不再可用

原先的SpringBoot版本为2.1.3.RELEASE,后来升级为2.7.8,导致问题出现


五、解决

从报错信息:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.就可以找到解决的方法

allowedOrigins替换为allowedOriginPatterns

  1. @Override
  2. public void addCorsMappings(CorsRegistry registry){
  3. registry.addMapping("/**")
  4. //将 allowedOrigins 替换为 allowedOriginPatterns
  5. //.allowedOrigins("*")
  6. .allowedOriginPatterns("*")
  7. .allowedMethods("*")
  8. .allowedHeaders("*")
  9. .allowCredentials(true)
  10. .maxAge(3600);
  11. }

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读