博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot拦截器WebMvcConfigurerAdapter,以及高版本的替换方案
阅读量:6824 次
发布时间:2019-06-26

本文共 3875 字,大约阅读时间需要 12 分钟。

 

 

背景: 在项目中我使用了自定义的Filter 这时候过滤了很多路径,当然对静态资源我是直接放过去的,但是,还是出现了静态资源没办法访问到springboot默认的文件夹中得文件

 

springBoot2.0 访问磁盘图片实现方式

1 @Configuration 2 public class MyWebConfig implements WebMvcConfigurer { 3  4     @Override 5     public void addViewControllers(ViewControllerRegistry registry) { 6         registry.addViewController("/").setViewName("app/index"); 7     } 8  9     @Override10     public void addResourceHandlers(ResourceHandlerRegistry registry) {11         registry.addResourceHandler("/temp/**").addResourceLocations("file:d:/temp/");12     }13 }

 

说下默认映射的文件夹有:

classpath:/META-INF/resources

  • classpath:/resources

  • classpath:/static

  • classpath:/public

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

我们可以通过修改spring.mvc.static-path-pattern来修改默认的映射**

*************************接管Spring Boot的Web配置 ************************这是重点中得重点********************

 

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

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

这里我们提到这个WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置

自定义资源映射addResourceHandlers

 

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

通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。我们访问自定义my文件夹中

@Configurationpublic class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {    /**     * 配置静态访问资源     * @param registry     */    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/");        super.addResourceHandlers(registry);    }}

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

public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/my/**").addResourceLocations("file:E:/my/");        super.addResourceHandlers(registry);    }

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

页面跳转addViewControllers

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

/**     * 以前要访问一个页面需要先创建个Controller控制类,再写方法跳转到页面     * 在这里配置后就不需要那么麻烦了,直接访问http://localhost:8080/toLogin就跳转到login.jsp页面了     * @param registry     */    @Override    public void addViewControllers(ViewControllerRegistry registry) {        registry.addViewController("/toLogin").setViewName("login");        super.addViewControllers(registry);    }

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

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

  • 创建我们自己的拦截器类并实现 HandlerInterceptor 接口
  • 其实重写WebMvcConfigurerAdapter中的addInterceptors方法把自定义的拦截器类添加进来即可

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

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*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {    // addPathPatterns 用于添加拦截规则    // excludePathPatterns 用户排除拦截    registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/toLogin","/login");    super.addInterceptors(registry);}

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

 

 

 

 

转载地址:http://mfrzl.baihongyu.com/

你可能感兴趣的文章
KMP算法
查看>>
leetcode------Symmetric Tree
查看>>
spring声明式事务 同一类内方法调用事务失效
查看>>
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩
查看>>
zookeeper项目使用几点小结
查看>>
杂物论第一 中华文明的根基
查看>>
c#中 枚举类型的使用(转)
查看>>
linux应用之tomcat的安装及配置(centos)
查看>>
bytes与str
查看>>
转:Socket原理与编程基础
查看>>
linux C 刚初始化后的一个变量在调用一个静态库中函数后被异常修改为乱码
查看>>
记录DHT网络主要功能步骤
查看>>
VS2010使用Qt库
查看>>
Python特殊语法--filter、map、reduce、lambda
查看>>
[原] Jenkins Android 自动打包配置(转)
查看>>
[Redux] Passing the Store Down with <Provider> from React Redux
查看>>
javascript笔记7-事件
查看>>
大数据处理分析的六大最好工具
查看>>
【转】俞军给淘宝产品经理的分享
查看>>
Thrift使用实例
查看>>