zoukankan      html  css  js  c++  java
  • springboot环境下配置过滤器和拦截器

    以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok

    但是,但是,这是springboot的环境,没有xml的配置。所以我们还要继续学习啊啊啊啊啊~~~~~

    先简单大致说明一下,过滤器我们可以直接在类上加上@Component注解实现,但是有些参数啥的还是不好配置,还是需要一个配置文件来搞,所以,spring给我们提供了一个注解,就相当于xml,然后每个方法返回一个对象用@Bean来标注,相当于<bean></bean>注解   看代码吧

    TimeFilter.java

    /**
     * 
     */
    package com.imooc.web.filter;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     * @author 敲代码的卡卡罗特
     *
     */
    //@Component
    public class TimeFilter implements Filter {
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#destroy()
         */
        @Override
        public void destroy() {
            System.out.println("time filter destroy");
        }
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
         */
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            System.out.println("time filter start");
            long start = new Date().getTime();
            chain.doFilter(request, response);
            System.out.println("time filter 耗时:"+ (new Date().getTime() - start));
            System.out.println("time filter finish");
        }
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
         */
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            System.out.println("time filter init");
        }
    
    }
    View Code

    TimeInterceptor.java

    /**
     * 
     */
    package com.imooc.web.interceptor;
    
    import java.util.Date;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * @author 敲代码的卡卡罗特
     *
     */
    @Component
    public class TimeInterceptor implements HandlerInterceptor {
    
        /* (non-Javadoc)
         * @see org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            System.out.println("preHandle");
            
            System.out.println(((HandlerMethod)handler).getBean().getClass().getName());
            System.out.println(((HandlerMethod)handler).getMethod().getName());
            
            request.setAttribute("startTime", new Date().getTime());
            return true;
        }
    
        /* (non-Javadoc)
         * @see org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.web.servlet.ModelAndView)
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle");
            Long start = (Long) request.getAttribute("startTime");
            System.out.println("time interceptor 耗时:"+ (new Date().getTime() - start));
    
        }
    
        /* (non-Javadoc)
         * @see org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("afterCompletion");
            Long start = (Long) request.getAttribute("startTime");
            System.out.println("time interceptor 耗时:"+ (new Date().getTime() - start));
            System.out.println("ex is "+ex);
    
        }
    
    }
    View Code

    WebConfig.java

    package com.imooc.web.config;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    import com.imooc.web.filter.TimeFilter;
    import com.imooc.web.interceptor.TimeInterceptor;
    
    /**
     * @author 敲代码的卡卡罗特
     *
     */
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware{
        
         private ApplicationContext applicationContext;  //实现ApplicationContextAware 主要的功能是得到上下文环境application
        
        @SuppressWarnings("unused")
        @Autowired
        private TimeInterceptor timeInterceptor;
        
        @Override    //配置拦截器 必须继承WebMvcConfigurerAdapter 
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(timeInterceptor);
        }
        
    //    @Bean  //配置过滤器
        public FilterRegistrationBean timeFilter() {
            
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            
            TimeFilter timeFilter = new TimeFilter();
            registrationBean.setFilter(timeFilter);
            
            List<String> urls = new ArrayList<>();
            urls.add("/*");
            registrationBean.setUrlPatterns(urls);
            
            return registrationBean;
            
        }
        
         @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
        
        /**
         * 
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**")
                    /* 静态资源加载配置*/
                    .addResourceLocations("classpath:/static/")
                    /*添加静态资源映射 如:http://localhost:8888/swagger-ui.html#/*/
                    .addResourceLocations("classpath:/META-INF/resources/")
                    /* 添加本地图片访问*/
                    .addResourceLocations("file:G:/imooc_videos_dev/");
        }
        
         /**
         * 文件上传配置
         *
         * @return MultipartConfigElement
         */
        @Bean
        public MultipartConfigElement multipartConfigElement(
                @Value("${spring.servlet.multipart.max-file-size}") String maxFileSize,
                @Value("${spring.servlet.multipart.max-request-size}") String maxRequestSize) {
            MultipartConfigFactory factory = new MultipartConfigFactory();
            // 单个文件最大
            factory.setMaxFileSize(maxFileSize);
            // 设置总上传数据总大小
            factory.setMaxRequestSize(maxRequestSize);
            return factory.createMultipartConfig();
        }
    }
    View Code
  • 相关阅读:
    react-router刷新页面Cannot GET 问题
    react学习之弹出层
    react学习之js-xlsx导入和导出excel表格
    c#串口通信并处理接收的多个参数
    react与微信小程序
    promise知识点小结
    汇编命令小记
    Firebase-config 在android中的使用
    python:html元素解析
    Toast实现源码解析
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/8837515.html
Copyright © 2011-2022 走看看