zoukankan      html  css  js  c++  java
  • 【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    勘误

    有个朋友说:为什么我配置了WebMvcConfigurer,静态资源static依然能访问?!


    这里是本人的失误,我在启动类中添加了EnableWebMvc注解(文章里却没有提及,最好的做法是放在对应的配置类上面),导致了默认配置的失效。如果不使用该注解,默认的配置路径不会被覆盖掉~

    前言

    虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题。不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可通过WebMvcConfigurer接口来配置。

    在与前端交互的过程中,也会碰到一个跨域的问题。我们也可通过WebMvcConfigurer接口来解决跨域的问题。

    springboot默认静态文件目录

    Spring Boot 默认为我们提供了静态资源处理,我建议大家直接使用Spring Boot的默认配置即可。默认提供的静态资源映射如下:

    • classpath:/META-INF/resources
    • classpath:/resources
    • classpath:/static
    • classpath:/public

    这些目录的静态资源时可以直接访问到的。上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public

    使用第一讲中spring initilize工具创建的springboot工程,默认也给我们创建了classpath:/static这个目录

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    我们往这个目录放一个图片,head.jpg

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    通过浏览器访问http://localhost:8080/head.jpg

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    自定义配置静态资源配置

    以上这些都是springboot默认给我们提供的,那么我们有没有能力自己自定义一个静态资源映射呢?完全可以。使用WebMvcConfigurer这个类即可实现自定义静态资源配置。

    我们新建一个WebConfig类实现WebMvcConfigurer接口 ,如下:

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
     
    }
    

    现在我们什么都不配置,然后重启应用,访问http://localhost:8080/head.jpg。却发现程序报404了:

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    这是因为我们配置了WebMvcConfigurer,这就替换了springboot原先的默认配置。这里我们想要自定义一个静态资源配置,比如,我们/file/**这样的请求,定向到我的D盘根目录下。我们重写WebMvcConfigurer接口的addResourceHandlers方法。如下:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
     registry.addResourceHandler("/file/**")
     .addResourceLocations("file:D:");
    }
    

    然后把head.jpg图片放到D盘下:

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    这里需要注意的是,配置外部的资源要使用file声明,配置jar包内部的使用classpath声明。

    WebMvcConfigurer接口解决跨域问题

    可以通过重写WebMvcConfigurer的addCorsMappings方法,可以配置跨域的问题。如下:

     /**
     * 跨域支持
     */
     @Override
     public void addCorsMappings(CorsRegistry registry) {
     registry.addMapping("/**")
     .allowedOrigins("*")
     .allowCredentials(true)
     .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH")
     .maxAge(3600 * 24);
     }
    

    总结

    WebMvcConfigurer接口不单只是能够配置静态资源访问和解决跨域问题,它还可以配置很多Web请求相关的东西,比如拦截器,数据转化(MessageConverters)等,碍于篇幅,这里就先不讨论了。可以配置的东西,可以通过接口的方法查看,如下:

    【快学springboot】6.WebMvcConfigurer配置静态资源和解决跨域

    SpringBoot 默认帮我们做了很多事情,这大大方便了我们的开发。 但是,有时候我们想要自己定义一些Handler,Interceptor,ViewResolver,MessageConverter,在Spring Boot 2.0之前版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated。现在,我们只能靠实现WebMvcConfigurer接口来实现了。

  • 相关阅读:
    运算符
    JS的基本概念和数据类型
    开源基于Canal的开源增量数据订阅&消费中间件
    用AntDeploy如何更新Agent
    AntDeploy发布前端项目到IIS(脱离vs单独使用)
    截图上传录屏gif上传工具推荐
    netcore开发windows普通服务(非Web)并一键发布到服务器
    一键发布部署vs插件[AntDeploy]开源了
    基于python的Elasticsearch索引的建立和数据的上传
    浅谈闭包
  • 原文地址:https://www.cnblogs.com/happy4java/p/11205791.html
Copyright © 2011-2022 走看看