springoot中应该使用过滤器还是?
作者:卡卷网发布时间:2025-01-10 19:13浏览数量:98次评论数量:0次
一、过滤器
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");
}
}
你 发表评论:
欢迎