热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

    @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才能生效。这就是一个简单的没什么逻辑的拦截器了,如果需要什么特别的操作的话就直接在我们自定义的拦截器方法里面写就好了。

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

    @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;
    }
    }

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

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

    /**
    * 监听器
    * 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

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
author-avatar
我是你的特效
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有