Spring boot 添加自定义Servlet,FIlter,Listener

11 篇文章 0 订阅
1 篇文章 0 订阅

1. 添加自定义servlet

  • 代码注册

    • 定义一个配置类

      @Configuration
      public class ServletConfig {
        
        @Bean
      public ServletRegistrationBean statViewServlet(){
          System.err.println("注册StatViewServlet...");
          ServletRegistrationBean servletRegistrationBean = 
              new ServletRegistrationBean();
          // StatViewServlet为自定义的Servlet
          StatViewServlet statViewServlet = new StatViewServlet();
          servletRegistrationBean.setServlet(statViewServlet);
          Map<String, String> initParams = new HashMap<>();
          initParams.put("allow", "");
          initParams.put("deny", "");
          initParams.put("loginUsername", "root");
          initParams.put("loginPassword", "123");
          initParams.put("resetEnable", "false");
          servletRegistrationBean.setInitParameters(initParams);
          servletRegistrationBean.addUrlMappings("/druid/*");
          
          return servletRegistrationBean;
        }
      }
  • 注解方式注册

    • 在自定义Servlet上添加@WebServlet注解

      @WebServlet(urlPatterns="/druid/*",  
        initParams={
             @WebInitParam(name="allow",value=""),        // IP白名单(没有配置或者为空,则允许所有访问)  
             @WebInitParam(name="deny",value=""),         // IP黑名单 (存在共同时,deny优先于allow)  
             @WebInitParam(name="loginUsername",value="root"),    // 用户名  
             @WebInitParam(name="loginPassword",value="123"),     // 密码  
             @WebInitParam(name="resetEnable",value="false")      // 禁用HTML页面上的“Reset All”功能  
        })
      public class DruidStatViewServlet extends StatViewServlet {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
      ​
      }
      ​
    • 在spring boot 启动类上添加@ServletComponentScan注解

      @SpringBootApplication
      @ServletComponentScan
      public class MybatisSpringBootAApplication {
      ​
          public static void main(String[] args) {
              SpringApplication.run(MybatisSpringBootAApplication.class, args);
          }
      }

      注: 代码注册的方式更使用于注册第三方Servlet.

2. 添加Filter

  • 注解方式

    • 在自定义的Filter类上添加@WebFilter(urlPatterns = "/*")注解

      @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",  
      initParams={  
          @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,druid/*")  //忽略资源  
        }  
      )
      public class DruidStatFilter extends WebStatFilter {
      ​
      }
    • 在spring boot 启动类上添加@ServletComponentScan注解。

      @SpringBootApplication
      @ServletComponentScan
      public class MybatisSpringBootAApplication {
      ​
          public static void main(String[] args) {
              SpringApplication.run(MybatisSpringBootAApplication.class, args);
          }
      }
  • 代码方式

    • 直接在自定义滤器类中添加@Component注解后该过滤器就会生效,无需再做其他任何操作。该过滤器会对所有路径进行拦截。

    • 定义一个配置类

      @Configuration
      public class FilterConfig {
        
        @Bean
        public FilterRegistrationBean myFilter() {
          FilterRegistrationBean filterRegistrationBean = 
              new FilterRegistrationBean();
            // MyFilter为自定义的过滤器
          MyFilter myFilter = new MyFilter();
          filterRegistrationBean.setFilter(myFilter);
          List<String> urls = new ArrayList<>();
          urls.add("/*");
          filterRegistrationBean.setUrlPatterns(urls);
          filterRegistrationBean.addInitParameter("exclusions", "/*.js,/*.gif,/*.jpg,/*.bmp,/*.png,/*.css,/*.ico,/druid/*");
          filterRegistrationBean.setName("myfilter..");
          return filterRegistrationBean;
        }
      }

 

3. 添加监听器

  • 注解方式

    • 在自定义监听器类上添加@WebListener注解

      @WebListener
      @Slf4j
      public class TestServletContextListener implements ServletContextListener {
          @Override
          public void contextInitialized(ServletContextEvent sce) {
              log.info("测试上下文监听初始化");
          }
      ​
          @Override
          public void contextDestroyed(ServletContextEvent sce) {
              log.info("测试上下文监听销毁");
          }
      }
    • 在spring boot 启动类上添加@ServletComponentScan注解

      @SpringBootApplication
      @ServletComponentScan
      public class SpringboottestApplication {
          public static void main(String[] args) {
              SpringApplication.run(SpringboottestApplication.class, args);
          }
      }
  • 代码方式

    • 定义一个配置类

      @Configuration
      public class ListenerConfig {
        @Bean
        public ServletListenerRegistrationBean<ServletContextListener> myListener(){
          // MyListener为自定义的监听器
          return new ServletListenerRegistrationBean<>(new MyListener());
        }
      }

4. 添加拦截器

  • 创建自定义拦截器,通过实现spring提供的HandlerInterceptor接口定义自己的拦截器。

    package cn.xiangxu.springboottest.commons.intereceptors;
    ​
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    ​
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    ​
    @Slf4j
    public class TestInterceptor02 implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
            log.info("=========调用controller之前==============");
            return true;
        }
    ​
        @Override
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
            log.info("=========调用controller之后==============");
        }
    ​
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
            log.info("=========视图渲染之后==============");
        }
    }
  • 添加拦截器配置

    package cn.xiangxu.springboottest.config;
    ​
    import cn.xiangxu.springboottest.commons.intereceptors.TestInterceptor01;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    ​
    @Configuration
    public class MyWebAppConfiguer extends WebMvcConfigurerAdapter {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            super.addInterceptors(registry);
            registry.addInterceptor(new TestInterceptor01()).addPathPatterns("/**");
        }
    }

注:本文内容参考自:https://www.cnblogs.com/NeverCtrl-C/p/8191920.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值