SpringBoot 很重要的一个类WebMvcConfigurerAdapter 的使用
自定义资源映射addResourceHandlers
比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。
@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
/**
* 配置静态访问资源
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");
super.addResourceHandlers(registry);
}
}
通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。我们访问自定义my文件夹中的elephant.jpg 图片的地址为 http://localhost:8080/my/elephant.jpg
如果你想指定外部的目录也很简单,直接addResourceLocations指定即可,代码如下:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/my/**").addResourceLocations("file:E:/my/");
super.addResourceHandlers(registry);
}
addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
配置拦截器
在之前Xml
配置形式天下的时候,我们都是在spring-mvc.xml
配置文件内添加<mvc:interceptor>
标签配置拦截器。拦截器的相关创建请访问第六章:如何在SpringBoot项目中使用拦截器,拦截器配置如下所示:
/**
* 拦截器配置
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
}
InterceptorRegistry
内的addInterceptor
需要一个实现HandlerInterceptor
接口的拦截器实例,addPathPatterns
方法用于设置拦截器的过滤路径规则。
拦截器addInterceptors
拦截器在我们项目中经常使用的,这里就来介绍下最简单的判断是否登录的使用。
要实现拦截器功能需要完成以下2个步骤:
- 创建我们自己的拦截器类并实现 HandlerInterceptor 接口
- 其实重写WebMvcConfigurerAdapter中的addInterceptors方法把自定义的拦截器类添加进来即可
首先,自定义拦截器代码:
package com.dudu.interceptor;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean flag =true;
User user=(User)request.getSession().getAttribute("user");
if(null==user){
response.sendRedirect("toLogin");
flag = false;
}else{
flag = true;
}
return flag;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
这里我们简单实现了根据session中是否有User对象来判断是否登录,为空就跳转到登录页,不为空就通过。
接着,重写WebMvcConfigurerAdapter中的addInterceptors方法如下:
/**
* 拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/toLogin","/login");
super.addInterceptors(registry);
}
addPathPatterns("/**")
对所有请求都拦截,但是排除了/toLogin
和/login
请求的拦截。
配置CORS
跨域我们之前章节也有讲到,请访问第二十五章:SpringBoot添加支持CORS跨域访问,Spring
既然为了集成了CORS
,那就证明了一点,以后前后端分离是一个开发趋势,配置代码如下所示:
/**
* 跨域CORS配置
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
super.addCorsMappings(registry);
registry.addMapping("/cors/**")
.allowedHeaders("*")
.allowedMethods("POST","GET")
.allowedOrigins("*");
}
配置ViewController
这一个配置在之前是经常被使用到的,最经常用到的就是"/"、"/index"路径请求时不通过@RequestMapping
配置,而是直接通过配置文件映射指定请求路径到指定View页面,当然也是在请求目标页面时不需要做什么数据处理才可以这样使用,配置内容如下所示:
/**
* 视图控制器配置
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
super.addViewControllers(registry);
registry.addViewController("/").setViewName("/index");
}
配置ViewResolver
这个对我们来说很熟悉,只要我们配置html、Jsp页面视图时就会用到InternalResourceViewResolver
配置类,然后设置preffix
、suffix
参数进行配置视图文件路径前缀与后缀。配置代码如下所示:
/**
* 配置请求视图映射
* @return
*/
@Bean
public InternalResourceViewResolver resourceViewResolver()
{
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
//请求视图文件的前缀地址
internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
//请求视图文件的后缀
internalResourceViewResolver.setSuffix(".jsp");
return internalResourceViewResolver;
} /**
* 视图配置
* @param registry
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
super.configureViewResolvers(registry);
registry.viewResolver(resourceViewResolver());
/*registry.jsp("/WEB-INF/jsp/",".jsp");*/
}
上述代码中方法resourceViewResolver
上配置了@Bean
注解,该注解会将方法返回值加入到SpringIoc
容器内。
而在configureViewResolvers
方法内配置视图映射为resourceViewResolver
方法返回的InternalResourceViewResolver
实例,这样完成了视图的配置。在下面还有注释掉的一部分代码,这块代码很神奇,我们先来看看org.springframework.web.servlet.config.annotation.ViewResolverRegistry
源码:
package org.springframework.web.servlet.config.annotation; public class ViewResolverRegistry {
...//省略代码
public UrlBasedViewResolverRegistration jsp() {
return this.jsp("/WEB-INF/", ".jsp");
} public UrlBasedViewResolverRegistration jsp(String prefix, String suffix) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix(prefix);
resolver.setSuffix(suffix);
this.viewResolvers.add(resolver);
return new UrlBasedViewResolverRegistration(resolver);
}
}
...//省略代码
配置MessageConverter
这个配置一般针对于Api
接口服务程序,配置在请求返回时内容采用什么转换器进行转换,我们最常用到的就是fastJson
的转换,配置如下所示:
/**
* 消息内容转换配置
* 配置fastJson返回json转换
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//调用父类的配置
super.configureMessageConverters(converters);
//创建fastJson消息转换器
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
//创建配置类
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//修改配置返回内容的过滤
fastJsonConfig.setSerializerFeatures(
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty
);
fastConverter.setFastJsonConfig(fastJsonConfig);
//将fastjson添加到视图消息转换器列表内
converters.add(fastConverter);
}
内容转换都是针对面向接口进行编写的实现类,都必须implements
HttpMessageConverter
接口完成方法的实现。
最新文章
- Struts2拦截器之ModelDrivenInterceptor
- 20161007 NOIP 模拟赛 T1 解题报告
- java开源网站
- C++中两块内存重叠的string的copy方法
- excel中单元格计算
- UART,USART,SPI,I2C等总线的介绍与区别20160526
- Webstorm10.0.4注册码
- mysql导出命令
- 每位iOS开发人员不容错过的10大实用工具
- PHP 5.6 微信上传临时素材的坑
- Unity UGUI基础之Button
- ASP.NET实现二维码
- KL散度、JS散度、Wasserstein距离
- 关于适用base64对图片进行编码在服务器上性能的相关讨论
- mybatis 缓存(cache)的使用
- 20181223 python 使用Beautiful Soup
- hustoj 管理员和后台设置
- 20135234mqy-——信息安全系统设计基础第十四周学习总结
- jQuery控制网页字体大小和肤色
- NOIP2015 D2T3 运输计划