zoukankan      html  css  js  c++  java
  • SpringBoot静态资源映射、拦截器、过滤器使用

    1.静态资源映射

    (1)自动映射静态资源文件

      SpringBoot默认提供了静态资源处理,使用WebMvcAutoConfiguration中的配置各种属性。

      建议使用SpringBoot的默认配置方式,提供的静态资源映射如下

    • classpath:/META-INF/resources
    • classpath:/resources
    • classpath:/static
    • classpath:/public

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

    (2)自定义映射静态资源文件

      SpringBoot帮我们预留的路径下可以放置静态文件外,我们也可以根据需求自定义静态文件的放置位置,不过需要注意的时,在SpringBoot2.0前后,实现方式上是有变化的,SpringBoot2.0以前静态资源的拦截、存放位置的指定等都是通过继承WebMvcConfigurerAdapter来完成的,但是SpringBoot2.0以后需要通过实现WebMvcConfigurer重写相关的方法来完成配置。代码如下:

    @Configuration
    public class WebMvcConfiguration implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/image/**").addResourceLocations("classpath:/image/");
        }
    View Code

    2.拦截器

      SpringBoot中使用拦截器,可在以下情况执行操作

    • 在将请求发送到控制器之前。
    • 在将响应发送给客户端之前。

      例如,使用拦截器在将请求发送到控制器之前添加请求标头,并在将响应发送到客户端之前添加响应标头。

      SpringBoot自定义拦截器需实现拦截器接口,使用注册接口对拦截器实例进行注册。

      自定义拦截器示例如下

    @Component
    public class DemoInterceptor implements HandlerInterceptor {
    
        /**用于在将请求发送到控制器之前执行操作。此方法应返回true,以将响应返回给客户端。
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            System.out.println("请求开始  --- Url : " + request.getRequestURI());
            return true;
        }
    
        /**用于在将响应发送到客户端之前执行操作。
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception {
            System.out.println("请求处理  --- Url : " + request.getRequestURI());
        }
    
        /**用于在完成请求和响应后执行操作。
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("请求结束  --- Url : " + request.getRequestURI());
            if (ex != null) {
                System.out.println("报错信息 : "+ ex);
            }
        }
    }
    View Code

      将拦截器实例注册到spring容器中示例如下

    @Configuration
    public class RequestConfig implements WebMvcConfigurer {
    
        @Resource
        private DemoInterceptor demoInterceptor;
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 添加拦截器,配置拦截地址
            registry.addInterceptor(demoInterceptor).addPathPatterns("/**");
        }
    }
    View Code

    3.过滤器

      javax.servlet.Filter是一个接口,可以动态地拦截请求和响应信息,以变换或使用包含在请求或响应中的信息。

      过滤器使用场景

    • 数据压缩
    • 记录日志
    • 数据统计
    • 数据格式转换
    • 数据设置默认值
    • 权限认证、黑白名单
    • 数据加密/解密、签名效验

      使用注解方式自定义过滤器示例如下

    /**自定义过滤器(注解方式)
     */
    @Component
    @WebFilter(filterName = "myFilter", urlPatterns = {"/*"}, description = "自定义过滤器")
    public class MyCustomFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("过滤器初始化");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("before ...");
            // 过滤器放行
            filterChain.doFilter(servletRequest, servletResponse);
            System.out.println("after ...");
        }
    
        @Override
        public void destroy() {
            System.err.println("过滤器销毁");
        }
    }
    View Code

      使用配置Bean方式自定义过滤器示例如下

    /**自定义过滤器(配置 Bean 方式)
     */
    public class MyCustomFilter implements Filter {
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("before ...");
            // 过滤器放行
            filterChain.doFilter(servletRequest, servletResponse);
            System.out.println("after ...");
        }
    
    }
    View Code
    @Configuration
    public class FilterConfig {
    
        /**代码方式注册Bean
         */
        @Bean
        public FilterRegistrationBean customFilter(){
            FilterRegistrationBean<MyCustomFilter> filterBean = new FilterRegistrationBean<>();
            filterBean.setFilter(new MyCustomFilter());
            filterBean.setName("FilterController");
            filterBean.addUrlPatterns("/*");
            return filterBean;
        }
    }
    View Code
  • 相关阅读:
    KY2成绩排序
    python 获取list中元素的索引
    pandas 读取指定一列数据
    python 删除列表中的第一位元素
    python 时间戳
    python 除法保留小数点后两位
    python 读取excel表格的一列数据并去重
    python中获取Excel表格sheet页整页内容
    IDEA创建spring boot项目
    servlet一些问题
  • 原文地址:https://www.cnblogs.com/bl123/p/14363020.html
Copyright © 2011-2022 走看看