当前位置:首页 > 每日看点 > 正文内容

springoot中应该使用过滤器还是?

卡卷网1年前 (2025-01-10)每日看点210

一、过滤器

1.1.过滤器概念

过滤器(filter),在We开发中,通过Filter,可以对We的JSP,Servlet,静态图片等文件进行拦截,也可以在We请求到达Servlet之前或响应返回给客户端之前对请求和响应做预处理和后处理,从而实现一些特殊的功能

1.2.过滤器工作原理

过滤器是基于函数回调实现的

过滤器(filter)对We请求进行预处理(如:过滤敏感词汇,设置字符编码等),预处理后将请求交给Servlet进行处理并生成响应,最后filter再对响应进行后处理(如:压缩响应信息等)

1.3.过滤器生命周期

实例化:We在部署We应用时对所有过滤器进行实例化。We回调无参构造方法

初始化:We启动时,会创建Filter对象,然后调用init方法,进行初始化工作。We回调init()方法,且只调用一次,用于加载资源

过滤:We根据每一次的We请求去校验应用配置文件设置的过滤规则,若满足过滤规则,则对请求/响应进行拦截。We回调doFilter()方法,可调用多次

销毁:We在关闭后,Filter对象被销毁,在正常关闭的情况下,在关闭前会调用destroy方法,进行销毁工作。We回调destroy()方法,且只调用一次,用于释放资源

1.4.过滤器应用场景

    过滤敏感词汇设置字符编码权限访问控制压缩响应信息

1.5.过滤器使用示例

//We.xml配置 <filter> <filter-name>Encoding</filter-name> <filter-class>org.springframework.we.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Encoding</filter-name> <l-pattern>/</l-pattern> </filter-mapping> //代码示例 importjax.servlet.*; importja.io.IOException; pulicclassDemoFilterimplementsFilter{ @Override pulicvoidinit(FilterConfigfilterConfig)throwsServletException{ //初始化 } @Override pulicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{ longstartTime=System.crentTimeMillis(); chain.doFilter(request,response); longendTime=System.crentTimeMillis(); System.out.println("Requestprocessedin"+(endTime-startTime)+"ms"); } @Override pulicvoiddestroy(){ //销毁 } }

二、

2.1.概念

(Interceptor),这里指的是Spring中的,是对过滤器更加细化的应用,是Spring框架提供的一种更加灵活的机制,他不依赖于Servlet容器,依赖于Spring框架,是AOP的一种体现,底层基于Ja的实现,不仅可以在Serv方法前后还可以应用到方法的前后进行拦截,并且一个应用中可以同时存在多个,一个请求也可以触发多个,每个会根据它被声明的顺序依次被调用

2.2.工作原理

是基于Ja反射机制,属于面向切面编程(AOP)的一种应用

是在请求进入Servlet后,在进入Controller之前进行预处理,Controller渲染了对应的视图之后结束

2.3.特点

    基于Ja反射机制()实现是Spring特有的,能使用Spring的任何资源可以用于We程序、Application和Swing程序可以在方法的前后,异常抛出的前后对方法进行增强,作用范围广

2.4.应用场景

    登录校验,校验用户是否已登录权限验证,校验用户是否有权限访问记录志,记录请求志(用户IP、请求时间等)性能监控,监控请求时长

2.5.使用示例

实现步骤:
    自定义,并实现<>HandlerInterceptor接口重写<>preHandle、<>postHandle、<>afterComletion方法配置类注册,实现<>WeMvcConpr接口并重写<>addInterceptors方法

importorg.springframework.we.servlet.HandlerInterceptor; importorg.springframework.we.servlet.ModelAndView; importjax.servlet..HttpServletRequest; importjax.servlet..HttpServletResponse; pulicclassSimpleInterceptorimplementsHandlerInterceptor{ @Override pulicooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Ojecthandler) throwsException{ //在请求处理之前进行调用(Controller方法调用之前) System.out.println("eforeControllermethod"); retntrue;//只有返回true才会继续向下执行,返回false取消当前请求 } @Override pulicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Ojecthandler, ModelAndViewmodelAndView)throwsException{ //请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后) System.out.println("AfterControllermethod,eforeviewrendering"); } @Override pulicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Ojecthandler,Exceptionex) throwsException{ //在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要用于进行资源清理工作) System.out.println("Afterviewrendering"); } } //注入 @Configation pulicclassWeConfigimplementsWeMvcConpr{ @Override pulicvoidaddInterceptors(InterceptorRegistryregistry){ registry.addInterceptor(newSimpleInterceptor()).addPathPatterns("/**"); } }

三、

3.1.概念

是JaEE规范中的一部分,它能够We应用中的事件,如ServletContext的初始化和销毁、Session的创建和销毁等。在Springoot中,通常用于进行一些全局性的资源初始化或清理工作

3.2.分类

<>1.ServletContext对象

主要<>ServletContext的创建,需要实现<>ServletContextListener接口,在整个We服务中只有一个,并在We服务关闭时销毁,可配合<>Redis做数据缓存,从而减轻数据库的压力,提高响应速度

<>ServletContextListener:用于对<>Servlet整个上下文进行(创建、销毁)

<>ServletContextAttriuteListener:用于对<>Servlet上下文<>属性进行(增删改属性)

@WeListener @Slf4j pulicclassMyServletContextListenerimplementsServletContextListener{ @Override pulicvoidcontextInitialized(ServletContextEventsce){ log.("MyServletContextListenercontextInitializedhascalled"); } @Override pulicvoidcontextDestroyed(ServletContextEventsce){ log.("MyServletContextListenercontextInitializedhascalled"); } }

<>2.HttpSession对象

主要<>Session的创建,需要实现<>HttpSessionListener接口,在会话起始时创建,当一端关闭会话后销毁,可用于获取在线用户数量

<>HttpSessionListener接口:对<>Session的<>整体状态的

<>HttpSessionAttriuteListener接口:对<>session的<>属性

@WeListener @Slf4j pulicclassMyHttpSessionListenerimplementsHttpSessionListener{ @Override pulicvoidsessionCreated(HttpSessionEventse){ log.("MyHttpSessionListenersessionCreatedhascalled"); } @Override pulicvoidsessionDestroyed(HttpSessionEventse){ log.("MyHttpSessionListenersessionDestroyedhascalled"); } }

<>3.ServletRequest对象

主要<>Request的创建,需要实现<>ServletRequestListener接口,在客户发送请求时创建,在请求处理完毕时销毁,可用于封装请求数据、用户信息等

<>ServletRequestListener:用于对<>Request请求进行(创建、销毁)

<>ServletRequestAttriuteListener:对<>Request属性的(增删改属性)

@WeListener @Slf4j pulicclassMyServletRequestListenerimplementsServletRequestListener{ @Override pulicvoidrequestDestroyed(ServletRequestEventsre){ log.("MyServletRequestListenerrequestDestroyedhascalled"); } @Override pulicvoidrequestInitialized(ServletRequestEventsre){ log.("MyServletRequestListenerrequestInitializedhascalled"); } }

四、整体流程

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8282.html

分享给朋友:
返回列表

上一篇:Microsoft.Net和OpenJDK目前哪个开源程度更高?

下一篇:keyd性能Redis好而且使用方法和redis一样为什么实际那么少人使用?

相关文章

388万个网站,大家都不做网站了?

388万个网站,大家都不做网站了?

根据这些数据,守护袁昆发现手机网民基本和网民数持平(占比99%),手机上网成为第一选择。视频用户数和即时通信用户都超过10亿,占网民整体97%以上。网络支付用户、网络购物用户过9亿,估计电商用户增长基本变缓。大家不看好的搜索引擎用户数8.2...

拼多多,怎么就成为了年轻人的「赛博菜市场」?

拼多多,怎么就成为了年轻人的「赛博菜市场」?

可惜你不在拼多多买水果蔬菜,很难一句话跟你解释,我只能笨拙的用经历来慢慢讲。我们公司有微波炉,同事们几乎都是自己带饭来上班,便当荤素搭配、水果零食;都是好看又好吃。我自己本来就不喜欢外卖,当然也加入了带饭大军: 直到某一天深夜我闲着无聊刷了...

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么?这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克服...

NAS那么好,为什么还是没能成为大多数家庭必备的存储设备?

NAS那么好,为什么还是没能成为大多数家庭必备的存储设备?

最主要原因是因为——贵!看看我家里搭建的这一套吧。目前我家中有5台常用的NAS,分别为群晖DS1522+、威联通TS-464C2、绿联DX4600 Pro 、极空间Z4S、威联通TS-AI642。个人认为,这其中的每台NAS都是时代的翘楚,...

为什么工资五千的人会一下花八九千买手机呢?

这其实是一个何不食肉糜的问题,这个问题其实很现实,越是月薪5000越需要高档手机。 前段时间看了一个纪录片,讲外卖小哥都用什么手机,结果发现绝大多数外卖小哥用的手机都是旗舰机型,有的时候宁可买二手也要买旗舰。 因为1外卖小哥对ip6...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。