SpringBoot专门提供了WebMvcConfigurer接口提供了视图解析规则方法和添加拦截器方法,用户可以通过实现WebMvcConfigurer接口来定义自己的视图解析规则和拦截处理方式。
WebMvcConfigurer接口
在WebMvcConfigurer接口里开发人员可以通过重写addViewControllers方法和addInterceptors方法自定义视图解析规则和拦截规则
自定义视图解析规则
/**
* 创建配置类,实现WebMvcConfigurer ,重写addViewControllers方法
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 添加自定义视图解析器
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
/**
* 转发 访问http://localhost:8080/m自动跳转到resource目录下的template内的ok.html
* template包下的资源不能通过地址栏直接访问(http://localhost:8080/ok.html)
* 需要经过Controller(http://localhost:8080/m)进行访问
*/
registry.addViewController("/m").setViewName("ok");
//重定向 第一个参数浏览器第一次访问路径 第二个参数服务器要浏览器再次请求的路径
registry.addRedirectViewController("/so","http://www.baidu.com");
}
}
自定义拦截器
- 创建一个拦截器实现HandlerInterceptor
@Component
public class MyInterceptor implements HandlerInterceptor {
/**
* 请求到达处理器之前进行拦截处理
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StringBuffer url = request.getRequestURL();
System.out.println(url+"被拦截");
return true;
}
/**
* 后置拦截处理
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
- 在实现WebMvcConfigurer接口重写addInterceptors的配置类中注册拦截器
/**
* 注册拦截器
* @param registry
*/
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/**") //设置拦截路径
.excludePathPatterns("/m"); //设置不拦截路径
}
测试: