SpringBoot 扩展对SpringMVC的默认配置(拦截器等)
SpringBoot 默认已经做了很多SpringMVC的默认配置:
1、视图解析器ViewResolver
2、静态资料的目录
3、默认首页index.html
4、图标名字和图标所在目录,favicon.ico
5、类型转换器Converter,格式转换器的Formatter
6、消息转换器HttpMessageConverters,我们直接向页面返回JSON格式的数据就靠它实现
7、消息代码解析器MessageCodesResolver, 作用配置了错误代码显示规则的一些东西,JSR303数据校验要用到它
在项目开发中,这些默认配置是绝对不够用的,所以,必须在它们的基础上扩展更多我们需要的配置。
SpringBoot 提供了相应扩展接口WebMvcConfigurer,在SpringBoot的配置类上实现它并加上@Configuretion注解就可以了
一、addViewControllers 的使用
在直接使用SpringMVC时,可以在springmvc.xml配置文件中直接配置:
<mvc:view-controller path="/index" view-name="index"/>
可实现不用在controller类里写映射方法,访问url可直接打开视图页面,视图模板引擎是必须的。
SpringBoot 中创建配置类,实现接口WebMvcConfigurer
@Configuration
public class AddMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").setViewName("index");
}
}
index.html 简单展示下:
注意:
1)关于扩展,有一个特殊的注解 @EnableWebMvc ,它的作用是全面接管SpringMvc的配置,也就是说SpringBoot的所有关于SpringMvc的自动配置都会失效(包括静态资源页的访问等等),而只有我们自己做的配置才会生效,所以什么都需要我们自己手动配置所有的类。
2)官方解释:
如果要保留Spring Boot MVC功能,并且要添加其他MVC配置(拦截器、格式化程序、视图控制器和其他功能),可以添加自己的@configuration类(类型为webmvcconfigurer),但不添加@enableWebMVC。如果要提供RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver的自定义实例,可以声明WebMVCregistrationsAdapter实例以提供此类组件。
如果要完全控制SpringMVC,可以添加自己的@configuration,并用@enableWebMVC注释。
二、addInterceptors 的拦截器使用
1)在配置类中添加 拦截器配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* 配置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login", "/", "/index");
}
}
2)创建拦截器实现类
public class LoginInterceptors extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle 方法。。。");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 方法。。。");
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
System.out.println("afterCompletion 方法。。。");
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("afterConcurrentHandlingStarted 方法。。。");
super.afterConcurrentHandlingStarted(request, response, handler);
}
}
preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应。
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器才会执行。
3)访问url 接口拦截:
参考文章:https://blog.csdn.net/She_lock/article/details/86241685
ends ~
推荐阅读
-
如何在springboot中扩展springmvc的功能以及使用拦截器
-
SpringBoot 中 WebMvcAutoConfiguration 对Date时间格式的默认配置以及修改
-
SpringBoot 扩展对SpringMVC的默认配置(拦截器等)
-
springboot中关于springMvc默认配置,配置扩展,全面接管
-
springboot扩展springmvc的配置
-
Day30——全面接管SpringMVC以及如何修改SpringBoot的默认配置
-
SpringBoot源码学习之路(七、SpringBoot中对SpringMVC的自动配置)
-
如何在springboot中扩展springmvc的功能以及使用拦截器
-
SpringBoot 中 WebMvcAutoConfiguration 对Date时间格式的默认配置以及修改
-
SpringBoot中SpringMVC的自动配置以及扩展