资讯专栏INFORMATION COLUMN

Spring Boot 的简单教程(八)拦截器,过滤器,监听器

SKYZACK / 2111人阅读

摘要:当过滤器有注入其他类时,可直接通过的方式进行实体类过滤器,这样不可自动注入过滤器使用的其他类。就是先简单的记录一下拦截器,过滤器和监听器的简单使用方法,后期如果有详细的使用方法,再来更新本文。

很多时候我们都想要做一些与业务逻辑无关的事情,比如统计在线人数,筛选登陆账号,统计页面浏览量等等。。。这时候我们就需要用到今天讲到的这些工具了。

首先我们先看一下拦截器
我们需要先自定义一个拦截器,写上我们自己对逻辑的处理。

@Slf4j
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        log.info("preHandle:请求前调用");
        //返回 false 则请求中断
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        log.info("postHandle:请求后调用");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        log.info("afterCompletion:请求调用完成后回调方法,即在视图渲染完成后回调");
    }
}

然后我们需要注册这个拦截器

public class WebMvcConfigurer extends WebMvcConfigurationSupport {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册拦截器 拦截规则
        //多个拦截器时 以此添加 执行顺序按添加顺序
        registry.addInterceptor(getHandlerInterceptor()).addPathPatterns("/*");
    }

    @Bean
    public static HandlerInterceptor getHandlerInterceptor() {
        return new MyInterceptor();
    }
}

当然了需要在启动类上添加注解@ServletComponentScan才能生效。这就是一个简单的没什么逻辑的拦截器了,如果需要什么特别的操作的话就直接在我们自定义的拦截器方法里面写就好了。

接下来我民额看一下过滤器,和上面的拦截器一样,我们需要先自定义一个过滤器,实现我们自己想实现的方法。

@Slf4j
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("filter 初始化");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        log.info("doFilter 请求处理");
        //对request、response进行一些预处理
        // 比如设置请求编码
        // request.setCharacterEncoding("UTF-8");
        // response.setCharacterEncoding("UTF-8");
        //TODO 进行业务逻辑

        //链路 直接传给下一个过滤器
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        log.info("filter 销毁");
    }
}

然后我们调用我们写的这个过滤器。

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean ResistFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        //当过滤器有注入其他bean类时,可直接通过@bean的方式进行实体类过滤器,这样不可自动注入过滤器使用的其他bean类。
        //当然,若无其他bean需要获取时,可直接new MyFilter(),也可使用getBean的方式。
        registration.setFilter(new MyFilter());
        //过滤器名称
        registration.setName("customFilter");
        //拦截路径
        registration.addUrlPatterns("/hello");
        //设置顺序
        registration.setOrder(10);
        return registration;
    }
}

在拦截器哪里我们已经在启动类上添加了注解,所以这里就不用重复添加了。

我们最后来看一下监听器,这里的监听器不需要调用等操作,只需要写好,添加注解就可以了。

/**
 * 监听器
 * servletRequestListener一般来实现web浏览量

 */
@WebListener
@Slf4j
public class ServletLister implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        log.info("监听器:销毁");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        log.info("监听器:初始化");
    }
}
```
```
/**
 * 监听器
 * httpSessionListener来实如今线人数的统计
 * @author zhouzhaodong
 */
@WebListener
@Slf4j
public class HttpLister implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        log.info("又有人上线了,统计一下在线人数吧!");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        log.info("又有人下线了,统计一下在线人数吧!");
    }
}
```
监听器主要是用来统计数量的。
就是先简单的记录一下拦截器,过滤器和监听器的简单使用方法,后期如果有详细的使用方法,再来更新本文。
代码下载地址:https://github.com/zhouzhaodong/Study

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75658.html

相关文章

  • Spring Boot - 单元测试(Junit4&Mockito)

    摘要:当面讲给你听讲堂地址,或许是最实用的教程,新课促销中,只要你敢来,保你收货满满。优惠报名全程撸码快速入门教程全原价,优惠价全程撸码进阶全原价,优惠价 回顾 Spring Boot - 初识 Hello World Spring Boot - Servlet、过滤器、监听器、拦截器 Spring Boot - 静态资源处理、启动加载、日志处理 Spring Boot - 部署Deplo...

    raoyi 评论0 收藏0
  • Spring Boot - 部署Deploy

    摘要:索引初识过滤器监听器拦截器静态资源处理启动加载日志处理数据库配置部署最后如果觉得我的文章对您有用,请点赞收藏。您的支持将鼓励我继续创作 Spring Boot - 部署Deploy 服务发布Tomcat 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法 @Override protected SpringApplication...

    YJNldm 评论0 收藏0
  • Spring Boot - Servlet、滤器听器截器

    摘要:过滤器监听器拦截器上一篇,我们讲解了配置及整合方法,不清楚的可以点击了解的两种实现方式通过手动注入实现一个返回的方法,并将该对象注册到中。 Spring Boot - Servlet、过滤器、监听器、拦截器 上一篇,我们讲解了spring boot(json,jsp,freemarker)配置及整合方法,不清楚的可以点击了解 Servlet的两种实现方式 通过@Bean手动注入实现一个...

    anRui 评论0 收藏0
  • Spring Boot - 表单校验(JSR303&Hibernate Validator)

    摘要:初步使用主要使用注解的方式对进行校验,第一个例子在需要校验的字段上指定约束条件然后在中可以这样调用,加上注解即可。如果校验失败,默认会返回框架的出错信息。指定到的分组名会全部进行校验,不指定的不校验。 Spring Boot - 表单校验(JSR303&Hibernate Validator) 回顾 Spring Boot - 初识 Hello World Spring Boot -...

    tinyq 评论0 收藏0

发表评论

0条评论

SKYZACK

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<