zoukankan      html  css  js  c++  java
  • 【转】Spring Boot干货系列:(六)静态资源和拦截器处理

    Spring Boot干货系列:(六)静态资源和拦截器处理

    前言

    本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter。

    正文

    前面章节我们也有简单介绍过SpringBoot中对静态资源的默认支持,今天详细的来介绍下默认的支持,以及自定义扩展如何实现。

    默认资源映射

    Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。

    建议大家使用Spring Boot的默认配置方式,提供的静态资源映射如下:

    • classpath:/META-INF/resources

    • classpath:/resources

    • classpath:/static

    • classpath:/public

    在工程里面路径是这样:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public

    大家可以自己在上面4个路径下都放一张同名的图片,访问一下即可验证。

    还有,你可以随机在上面一个路径下面放上index.html,当我们访问应用根目录http://lcoalhost:8080 时,会直接映射到index.html页面。

    对应的配置文件配置如下:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    我们可以通过修改spring.mvc.static-path-pattern来修改默认的映射,例如我改成/dudu/**,那运行的时候访问 http://lcoalhost:8080/dudu/index.html 才对应到index.html页面。

    接管Spring Boot的Web配置

    如果Spring Boot提供的Sping MVC不符合要求,则可以通过一个配置类(注解有@Configuration的类)加上@EnableWebMvc注解来实现完全自己控制的MVC配置。

    当然,通常情况下,Spring Boot的自动配置是符合我们大多数需求的。在你既需要保留Spring Boot提供的便利,有需要增加自己的额外的配置的时候,可以定义一个配置类并继承WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解。

    这里我们提到这个WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置,这里我们就介绍几个常用的。

    自定义资源映射addResourceHandlers

    比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。

    Spring Boot干货系列:(六)静态资源和拦截器处理

    通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。我们访问自定义my文件夹中的elephant.jpg 图片的地址为http://localhost:8080/my/elephant.jpg

    如果你想指定外部的目录也很简单,直接addResourceLocations指定即可,代码如下:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径

    页面跳转addViewControllers

    以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurerAdapter中的addViewControllers方法即可达到效果了

    Spring Boot干货系列:(六)静态资源和拦截器处理

    值的指出的是,在这里重写addViewControllers方法,并不会覆盖WebMvcAutoConfiguration中的addViewControllers(在此方法中,Spring Boot将“/”映射至index.html),这也就意味着我们自己的配置和Spring Boot的自动配置同时有效,这也是我们推荐添加自己的MVC配置的方式。

    拦截器addInterceptors

    拦截器在我们项目中经常使用的,这里就来介绍下最简单的判断是否登录的使用。

    要实现拦截器功能需要完成以下2个步骤:

    • 创建我们自己的拦截器类并实现 HandlerInterceptor 接口

    • 其实重写WebMvcConfigurerAdapter中的addInterceptors方法把自定义的拦截器类添加进来即可

    首先,自定义拦截器代码:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    这里我们简单实现了根据session中是否有User对象来判断是否登录,为空就跳转到登录页,不为空就通过。

    接着,重写WebMvcConfigurerAdapter中的addInterceptors方法如下:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    addPathPatterns("/**")对所有请求都拦截,但是排除了/toLogin和/login请求的拦截。

    页面登录关键代码:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    控制器代码:

    Spring Boot干货系列:(六)静态资源和拦截器处理

    这样访问的时候,如果未登录就会跳转到login.html页面,而访问http://localhost:8080/toLogin 和http://localhost:8080/login 不会被拦截。

    Spring Boot干货系列:(六)静态资源和拦截器处理

    更多配置可以查看WebMvcConfigurerAdapter的类的API。因其是WebMvcConfigurer接口的实现,所以WebMvcConfigurer的API方法也可以用来配置MVC。

    只是实现这个接口的话,要实现所有的方法,这个就尴尬了。

    所以还是推荐使用继承WebMvcConfigurerAdapter类来处理。

    总结

    静态资源跟拦截器在平时项目中经常用到,弄懂如何处理是很有用的。今天就到此为止,下一篇将来介绍一下项目中如何使用日志。

  • 相关阅读:
    02_虚拟机参数
    01_java虚拟机基础入门
    03_模板消息
    Redis 实现分布式锁
    01_微信小程序支付
    python产生随机字符串
    输出的编码
    jmeter MD5加密
    vscode 插件推荐
    appium自动化安装(二)
  • 原文地址:https://www.cnblogs.com/exmyth/p/8080658.html
Copyright © 2011-2022 走看看