这个类是SpringBoot内部提供专门处理用户自行添加的配置,里面不仅仅包含了修改视图的过滤还有其他很多的方法,包括我们后面章节要讲到的拦截器,过滤器,Cors配置等。
开始前还是有点要注意的:
springBoot 的版本从1.x 升级到 2 之后WebMvcConfigurerAdapter就发现这个抽象类已经过时了,查看源码就知道,在springboot 1.x中WebMvcConfigurerAdapter是实现了WebMvcConfigurer接口。现在spring boot 2.x版本直接使用WebMvcConfigurer。
spring boot 1.x 2.x版本,都有WebMvcConfigurationSupport可以实现和WebMvcConfigurerAdapter相同的功能。但是有点问题,使用WebMvcConfigurationSupport会出现application.yml中配置的静态资源不能访问。这时候启动项目时会发现映射根本没有成功,也就是说application.properties中添加配置的映射配置没有启动作用,然后我们会想到重写addResourceHandlers方法来进行映射:
@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/sh/static/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); }首先说说spring boot 对静态资源访问,我们把静态资源放在src/main/resource/static中不需要配置就可以访问到,但是我们想自定义静态资源的路径,就要用到WebMvcConfigurerAdapter。定义一个配置类并继承WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解
一、自定义资源映射addResourceHandlers
比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。
通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。我们访问自定义my文件夹中的elephant.jpg 图片的地址为http://localhost:8080/my/elephant.jpg
如果你想指定外部的目录也很简单,直接addResourceLocations指定即可,代码如下:
addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
二、页面跳转addViewControllers
以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurerAdapter中的addViewControllers方法即可达到效果了
在这里重写addViewControllers方法,并不会覆盖WebMvcAutoConfiguration中的addViewControllers(在此方法中,Spring Boot将“/”映射至index.html),这也就意味着我们自己的配置和Spring Boot的自动配置同时有效,这也是我们推荐添加自己的MVC配置的方式。
三、拦截器addInterceptors
拦截器在我们项目中经常使用的,这里就来介绍下最简单的判断是否登录的使用。
要实现拦截器功能需要完成以下2个步骤:
创建我们自己的拦截器类并实现 HandlerInterceptor 接口
其实重写WebMvcConfigurerAdapter中的addInterceptors方法把自定义的拦截器类添加进来即可
首先,自定义拦截器代码:
这里我们简单实现了根据session中是否有User对象来判断是否登录,为空就跳转到登录页,不为空就通过。
接着,重写WebMvcConfigurerAdapter中的addInterceptors方法如下:
addPathPatterns("/**")对所有请求都拦截,但是排除了/toLogin和/login请求的拦截。
页面登录关键代码:
控制器代码:
这样访问的时候,如果未登录就会跳转到login.html页面,而访问http://localhost:8080/toLogin 和http://localhost:8080/login 不会被拦截。
更多配置可以查看WebMvcConfigurerAdapter的类的API。因其是WebMvcConfigurer接口的实现,所以WebMvcConfigurer的API方法也可以用来配置MVC。
只是实现这个接口的话,要实现所有的方法,这个就尴尬了。
所以还是推荐使用继承WebMvcConfigurerAdapter类来处理。