关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

SpringBoot过滤器拦截器监听器对比及使用场景

7月15日 不回头投稿
  一、关系图理解
  二、区别1。过滤器过滤器是在web应用启动的时候初始化一次,在web应用停止的时候销毁可以对请求的URL进行过滤,对敏感词过滤挡在拦截器的外层实现的是javax。servlet。Filter接口,是Servlet规范的一部分在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后依赖Web容器会多次执行1。1HttpServletRequestWrapper
  在请求到达之前对request进行修改packagecom。dingwen。lir。importlombok。extern。slf4j。Slf4j;importjavax。servlet。http。HttpServletRimportjavax。servlet。http。HttpServletRequestWimportjava。util。A在请求到达之前对request进行修改authordingwenSlf4jpublicclassRequestWrapperextendsHttpServletRequestWrapper{publicRequestWrapper(HttpServletRequestrequest){super(request);log。info(RequestWrapper);}OverridepublicStringgetParameter(Stringname){可以对请求参数进行过滤returnsuper。getParameter(name);}OverridepublicString〔〕getParameterValues(Stringname){对请求参数值进行过滤String〔〕valuessuper。getRequest()。getParameterValues(name);returnsuper。getParameterValues(name);returntest。split();}}1。2OncePerRequestFilter
  OncePerRequestFilter,顾名思义,它能够确保在一次请求中只通过一次filterpackagecom。dingwen。lir。importlombok。extern。slf4j。Slf4j;importorg。springframework。web。filter。OncePerRequestFimportjavax。servlet。FilterCimportjavax。servlet。ServletEimportjavax。servlet。http。HttpServletRimportjavax。servlet。http。HttpServletRimportjava。io。IOEimportjava。io。PrintWimportjava。util。A请求过滤器OncePerRequestFilter:OncePerRequestFilter,顾名思义,它能够确保在一次请求中只通过一次filter。大家常识上都认为,一次请求本来就只filter一次,为什么还要由此特别限定呢,往往我们的常识和实际的实现并不真的一样,经过一番资料的查阅,此方法是为了兼容不同的webcontainer,也就是说并不是所有的container都入我们期望的只过滤一次,servlet版本不同,执行过程也不同,因此,为了兼容各种不同运行环境和版本,默认filter继承OncePerRequestFilter是一个比较稳妥的选择。authordingwenSlf4jpublicclassRequestFilterextendsOncePerRequestFilter{Overridepublicvoiddestroy(){super。destroy();log。info(RequestFilterdestroy);}OncePerRequestFilter。doFilter方法中通过request。getAttribute判断当前过滤器是否已执行若未执行过,则调用doFilterInternal方法,交由其子类实现OverrideprotectedvoiddoFilterInternal(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse,FilterChainfilterChain)throwsServletException,IOException{try{RequestWrapperrequestWrappernewRequestWrapper(httpServletRequest);filterChain。doFilter(requestWrapper,httpServletResponse);log。info(RequestFilter);log。info(Arrays。toString(requestWrapper。getParameterValues(name)));}catch(Exceptionexception){httpServletResponse。setCharacterEncoding(utf8);httpServletResponse。setContentType(charsetutf8);PrintWriterwriterhttpServletResponse。getWriter();writer。write(exception。toString());}}}1。3配置packagecom。dingwen。lir。importcom。dingwen。lir。filter。RequestFimportcom。dingwen。lir。filter。RequestWimportorg。springframework。boot。web。servlet。FilterRegistrationBimportorg。springframework。context。annotation。Bimportorg。springframework。context。annotation。Cimportjavax。servlet。F过滤器配置类authordingwenConfigurationpublicclassFilterConfig{BeanpublicRequestFilterrequestFilter(){returnnewRequestFilter();}BeanpublicFilterRegistrationBeanRequestFilterregistrationBean(){FilterRegistrationBeanRequestFilterregistrationBeannewFilterRegistrationBean();registrationBean。setFilter(requestFilter());registrationBean。addUrlPatterns(filter);registrationBean。setName(RequestFilter);过滤器的级别,值越小级别越高越先执行registrationBean。setOrder(1);returnregistrationB}}2。拦截器实现org。springframework。web。servlet。HandlerInterceptor接口,动态代理拦截器应用场景,性能分析,权限检查,日志记录是一个Spring组件,并由Spring容器管理,并不不依赖Tomcat等容器,是可以单独使用的。不仅能应用在web程序中,也可以用于Application、Swing等程序中是在请求进入servlet后,在进入Controller之前进行预处理的,Controller中渲染了对应的视图之后请求结束2。1登录拦截packagecom。dingwen。lir。importcom。dingwen。lir。entity。Uimportorg。springframework。stereotype。Cimportorg。springframework。util。ObjectUimportorg。springframework。web。servlet。HandlerIimportjavax。servlet。http。HttpServletRimportjavax。servlet。http。HttpServletRimportjava。io。IOE登录拦截authordingwenComponentpublicclassPageInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{Useruser(User)request。getSession()。getAttribute(user);if(!ObjectUtils。isEmpty(user)){}else{不管是转发还是重定向,必须返回false。否则出现多次提交响应的错误redirect(request,response);}}对于请求是ajax请求重定向问题的处理方法paramrequestparamresponsepublicvoidredirect(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{if(XMLHttpRequest。equals(request。getHeader(XRequestedWith))){ajax获取当前请求的路径response。setHeader(AccessControlExposeHeaders,REDIRECT,CONTENTPATH);告诉ajax我是重定向response。setHeader(REDIRECT,REDIRECT);告诉ajax我重定向的路径StringBufferurlrequest。getRequestURL();StringcontextPathrequest。getContextPath();response。setHeader(CONTENTPATH,url。replace(url。indexOf(contextPath)contextPath。length(),url。length(),)。toString());}else{httpresponse。sendRedirect(pagelogin);}response。getWriter()。write(403);response。setStatus(HttpServletResponse。SCFORBIDDEN);}}2。2配置packagecom。dingwen。lir。importcom。dingwen。lir。interceptor。PageIimportorg。springframework。context。annotation。Cimportorg。springframework。web。servlet。config。annotation。InterceptorRimportorg。springframework。web。servlet。config。annotation。ResourceHandlerRimportorg。springframework。web。servlet。config。annotation。ViewControllerRimportorg。springframework。web。servlet。config。annotation。WebMvcCmvc控制器配置MyWebMvcConfigurer:Springboot2。x以后版本使用authordingwenConfigurationpublicclassMyWebMvcConfigurerimplementsWebMvcConfigurer{拦截器依赖于Spring容器,此处拦截了所有,需要对静态资源进行放行OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){拦截器默认的执行顺序,就是它的注册顺序,也可以通过Order手动设置控制,值越小越先执行。registry。addInterceptor(newPageInterceptor())。addPathPatterns()。order()registry。addInterceptor(newPageInterceptor())。addPathPatterns()。excludePathPatterns(pagelogin,userlogin,pageajax,static);}不要要写控制器即可完成页面跳转访问paramregistryOverridepublicvoidaddViewControllers(ViewControllerRegistryregistry){registry。addViewController(pageajax)。setViewName(ajax);}自定义静态资源映射SpringBoot默认为我们提供了静态资源映射:classpath:METAINFresourcesclasspath:resourcesclasspath:staticclasspath:public优先级:METAINFresourcesresourcesstaticpublicparamregistryOverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry。addResourceHandler(static)。addResourceLocations(classpath:static);registry。addResourceHandler(static)。addResourceLocations(file:E:static);}}3。监听器
  实现javax。servlet。ServletRequestListener,javax。servlet。http。HttpSessionListener,javax。servlet。ServletContextListener等等接口
  主要用来监听对象的创建与销毁的发生,比如session的创建销毁,request的创建销毁,ServletContext创建销毁三、注意1。静态资源问题
  SpringBoot2。x以后版本拦截器也会拦截静态资源,在配置拦截器是需要将姿态资源放行。拦截器依赖于Spring容器,此处拦截了所有,需要对静态资源进行放行OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry。addInterceptor(newPageInterceptor())。addPathPatterns()。excludePathPatterns(pagelogin,userlogin,pageajax,static);}
  SpringBoot2。x自定义静态资源映射spring:mvc:staticpathpattern:static
  默认目录classpath:METAINFresourcesclasspath:resourcesclasspath:staticclasspath:public
  优先级:METAINFresourcesresourcesstaticpublic2。登录拦截ajax重定向
  由于ajax是异步的,还在当前页面进行的局部请求。当拦截到登录请求时,即使重定向也无法生效。需采用服务端给地址由前端进行跳转。详细见登录拦截器代码。前端处理!DOCTYPEhtmlhtmllangenheadmetacharsetUTF8titleAJAXtitleheadbodybuttonUSERbuttonbodyhtml四、测试
  代码地址:
  https:gitee。comdingwengiteefilterinterceptorstudy。git1。拦截器测试1。1启动项目访问首页
  http:localhost:8080pageindex
  由于没有登录,直接重定向到了登录页
  1。2输入用户名密码完成登录,调转到用户页
  此时在访问首页
  1。2退出登录
  成功退出后,访问为授权的页面也相对会被重定向到登录页
  1。3ajax未授权访问测试
  点击访问user,由于未登录,没有全权访问。在前端进行了页面跳转,转到了登录页。
  2。过滤器测试
  可以看到过滤器进行了相对应的处理,重写的getParameterValues()也生效了。配合使用HttpServletRequestWrapperOncePerRequestFilter实现了对request的修改。
  原文链接:https:mp。weixin。qq。comstKZDqPuOWbqrDyBhVRwoA
投诉 评论 转载

婴儿呕吐有哪些针灸疗法呕吐是指胃内容物和一部分小肠内容物在消化道内逆行而上、自口腔排出的反射性动作,是消化道机能障碍的一种表现。那么婴儿呕吐有哪些针灸疗法呢?下面就一起随本站小编来了解一下吧。……小蓝罐怎么用润唇膏你用对了吗Blistex小蓝罐怎么用:第一步使用Blistex小蓝罐首先需要将双手清洗干净,因为Blistex小蓝罐本身是没有配挖勺,所以很多小仙女都比较习惯用双手挖取润唇膏在涂抹……SpringBoot过滤器拦截器监听器对比及使用场景一、关系图理解二、区别1。过滤器过滤器是在web应用启动的时候初始化一次,在web应用停止的时候销毁可以对请求的URL进行过滤,对敏感词过滤挡在拦截器的外层实现的是jav……都市奇门医圣第章实习生清源市第一人民医院。8点是医院住院部正忙碌的时候,往往这个时候医生都会查房,问一下病号昨天的情况,记录在案。现在正值夏季,往往这个时候实习医生最多,今年也不例外。……如果你愿意我娶你你总让我给你写点什么,你说这些年我写了太多我和别人的爱恨离别,我的文字和我的伤心都是为了别人,从来没有为你。昨晚因为我你受到了从未有过的伤害,所以你在我内疚的时候要求我为你写一……带着心理问题积极生活痛苦本身其实只是一个信号,只是告诉我们,问题发生了,我们应该去改变。如果只是一味努力降低痛苦、逃避痛苦,那就是在逃避问题自身,这并不利于心灵的成长。9月10日,是世界预防……超越苹果,荣耀真的做到了今年1月26日,荣耀终端有限公司CEO赵明在接受采访的时候,放出一番豪言壮语,表示荣耀的发展目标和发展战略就是要对标苹果。近年来,很多国产厂商似乎都看不惯苹果在我国消费市场一家……我的校园我的校园是充满快乐的,我的校园里最显眼的就是那两棵石榴树了。不过校园里的一年四季也都很那么的美丽,而且在学校的每一位同学,每一天过的也都是快乐的。春天,校园里的石榴树开花……全红婵家庭近况爸爸做果园生意,妈妈帮忙,哥哥已开餐厅当老板全红婵是东京奥运会的跳水奥运冠军,由于她年龄小,表现出色,受到很多观众的喜爱。从东京回国之后,全红婵就成为了全国观众的宠儿。在隔离期间,就不断接受网络采访,让大家更好的了解她。……掏鸟窝乡村的天,是那么蓝,乡村的树,是那么绿,那片小树林带给了我无限的快乐,特别是我在乡村掏鸟窝那件事,深深的刻在了我的脑中。那是一个星期六,爸爸带我到了老家,在吃饭的时候,我……被李铁案吓怕了?谈执教国足范志毅改口说自己不够格,足协也不去头条创作挑战赛李铁案对中国足球影响深远,昨天,国足名宿范志毅在直播时被问及执教国足时,罕见改口,称自己还不够资格,有机会的话更想进入管理层,成为国外那种职业经理人。对于此……问界M5和M7的警用车项目造型太帅了最近有条新闻在汽车界流传,那就是华为问界M5和M7进入警用车合作项目供应方,已经开始为公安系统的警车增加智慧科技加持,辅助警局更好地开展工作。其实这件事的背后至少能透露出……
连载丨桥头夜话(1)巴人谷女人梯如何聪明商量要彩礼围得造句用围得造句大全香港旅游业没救了?只有正常时期的1,工会促特区政府予以支援比胸可爱的小甲鱼长寿王的故事小刀造句用小刀造句大全中华文化造句用中华文化造句大全纹唇真的可以代替口红么?纹唇痛不痛?4个知识点带你了解纹唇儿童防走失报警器的报警距离是多少中国是全球产业链供应链关键一环
如何评价西安一班主任体罚学生称自己年轻气盛。校领导不知其没有半丸子头扎法大全半披发半扎发简单又减龄高二作文人生没有彩排清明节放假安排通知预算管理在企业中的应用研究二年级看图写话助人为乐雪后登顶北京房山将军坨三峰,往返峭壁小悬崖,独享大美河山威少,NBA历史三双王,他在续写着自己的传奇中秋赏月的作文400字5篇经期减肥好吗如何减肥一场激烈的比赛想破脑袋的脑筋急转弯

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州