日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OncePerRequestFilter-源码解析

發(fā)布時(shí)間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OncePerRequestFilter-源码解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在spring中,filter都默認(rèn)繼承OncePerRequestFilter,但為什么要這樣呢??
OncePerRequestFilter顧名思義,他能夠確保在一次請(qǐng)求只通過一次filter,而不需要重復(fù)執(zhí)行。

/** * 過濾器基類,旨在確保每個(gè)請(qǐng)求調(diào)度在任何servlet容器上執(zhí)行一次執(zhí)行。? * 它提供了一個(gè)帶有HttpServletRequest和HttpServletResponse參數(shù)的{@link #doFilterInternal}方法。 */ public abstract class OncePerRequestFilter extends GenericFilterBean {//附加到“已過濾”請(qǐng)求屬性的過濾器名稱的后綴。public static final String ALREADY_FILTERED_SUFFIX = ".FILTERED";?//這個(gè)doFilter實(shí)現(xiàn)存儲(chǔ)“已經(jīng)過濾”的請(qǐng)求屬性,如果該屬性已經(jīng)存在,則不進(jìn)行再次過濾。//@see #getAlreadyFilteredAttributeName@Overridepublic final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)throws ServletException, IOException {if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {throw new ServletException("OncePerRequestFilter just supports HTTP requests");}HttpServletRequest httpRequest = (HttpServletRequest) request;HttpServletResponse httpResponse = (HttpServletResponse) response;String alreadyFilteredAttributeName = getAlreadyFilteredAttributeName();boolean hasAlreadyFilteredAttribute = request.getAttribute(alreadyFilteredAttributeName) != null;if (hasAlreadyFilteredAttribute || skipDispatch(httpRequest) || shouldNotFilter(httpRequest)) {// 繼續(xù)而不調(diào)用此過濾器...filterChain.doFilter(request, response);}else {// 調(diào)用這個(gè)過濾器…request.setAttribute(alreadyFilteredAttributeName, Boolean.TRUE);try {doFilterInternal(httpRequest, httpResponse, filterChain);}finally {// 刪除此請(qǐng)求的“已過濾”請(qǐng)求屬性。request.removeAttribute(alreadyFilteredAttributeName);}}}/*** 返回表明請(qǐng)求已被過濾的請(qǐng)求屬性的名稱。*/protected String getAlreadyFilteredAttributeName() {// 如果沒有可用的過濾器名,則為{@code null}String name = getFilterName();if (name == null) {name = getClass().getName();}return name + ALREADY_FILTERED_SUFFIX;}private boolean skipDispatch(HttpServletRequest request) {if (isAsyncDispatch(request) && shouldNotFilterAsyncDispatch()) {return true;}if (request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE) != null && shouldNotFilterErrorDispatch(){return true;}return false;}/*** 在Servlet 3.0中引入的調(diào)度器類型{@code javax.servlet.DispatcherType.ASYNC}意味著一個(gè)過濾器可以在一個(gè)請(qǐng)求過程中在多個(gè)線* 程中被調(diào)用。 如果過濾器當(dāng)前在異步分派中執(zhí)行,則此方法返回{true}。*/protected boolean isAsyncDispatch(HttpServletRequest request) {return WebAsyncUtils.getAsyncManager(request).hasConcurrentResult();}/*** 請(qǐng)求處理是否處于異步模式,意味著退出當(dāng)前線程后不會(huì)提交響應(yīng)。*/protected boolean isAsyncStarted(HttpServletRequest request) {return WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted();}/*** 可以在子類中覆蓋自定義過濾控件,返回{true}以避免過濾給定的請(qǐng)求。 默認(rèn)實(shí)現(xiàn)總是返回{@code false}。*/protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {return false;}protected boolean shouldNotFilterAsyncDispatch() {return true;}protected boolean shouldNotFilterErrorDispatch() {return true;}/*** 與{@code doFilter}相同的合同,但保證在單個(gè)請(qǐng)求線程中每個(gè)請(qǐng)求只調(diào)用一次。* /protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException;}

?

? ? // GenericFilterBean.class//使這個(gè)過濾器的名稱對(duì)子類可用。類似于GenericServlet的{@code getServletName()}。<p>默認(rèn)使用FilterConfig的過濾器名稱。//如果在Spring應(yīng)用程序上下文中初始化為bean,那么它將返回到bean工廠中定義的bean名稱。@Nullableprotected String getFilterName() {return (this.filterConfig != null ? this.filterConfig.getFilterName() : this.beanName);}?


---------------------?
作者:Pazz楓?
來源:CSDN?
原文:https://blog.csdn.net/baidu_36327010/article/details/80538491?utm_source=copy?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的OncePerRequestFilter-源码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: avtt亚洲天堂 | 少妇高潮喷水在线观看 | 亚洲免费一 | 精品免费在线视频 | 中文字幕在线观看91 | 欧美gv在线观看 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩精品在线观看视频 | 国产精品电影院 | 999精品在线观看 | 青青免费视频 | 日本妈妈9 | 免费三级在线 | 毛片在线免费 | 91一区在线 | 国产精品久久久免费观看 | 奇米四色网 | 三级自拍视频 | 亚洲成人自拍 | 欧美视频在线免费 | 成人免费视频国产在线观看 | 伊人快播| 亚洲色图一区二区三区 | 91n在线观看 | 亚洲一区二区三区中文字幕 | 色屋永久| 久久99久| 欧美一a| 国产精品色在线 | 亚洲国产日韩一区二区 | 少妇做爰免费视频播放 | 樱花影院最新免费观看攻略 | 日本伦理一区二区 | 奇米在线播放 | 久操这里只有精品 | 久操新在线 | 免费看污视频的网站 | 亚洲精品九九 | 亚洲免费在线观看av | 欧美午夜网 | 国产一区二区在线视频 | 又色又爽又黄 | 精品不卡在线 | 久久精品国产亚洲AV无码男同 | 精品福利视频一区二区 | 国产无码精品一区二区 | 啪啪网页 | 日日碰狠狠添天天爽无码av | 大尺度床戏揉捏胸视频 | 绯色av一区二区 | 亚洲国内在线 | 欧美激情片一区二区 | 亚洲一级在线播放 | 免费国产视频在线观看 | 精品一区二区三区免费 | 成人一区二区免费视频 | 久久久精品综合 | 国产十八熟妇av成人一区 | 成人欧美一区二区三区黑人免费 | 少妇太爽了太深了太硬了 | 日日夜夜草 | jizz在线观看视频 | 亚洲人成电影一区二区在线 | 亚洲欧美国产精品久久久久久久 | 国产白浆视频 | 一级片www | 国产鲁鲁 | 精品在线一区二区三区 | 美女黄页在线观看 | 精品3p| 日色视频 | 波多野结衣国产在线 | 78日本xxxxxxxxx59| 奇米视频在线观看 | 9l视频自拍蝌蚪9l视频 | 精品无码一区二区三区 | 天天干天天色天天射 | 91色视频在线| 欧美变态口味重另类在线视频 | 日韩一区二区免费在线观看 | 黄色国产一区二区 | 91成人精品国产刺激国语对白 | 黄色一级大片在线免费看国产一 | 欧美在线视频精品 | 国产精品成人国产乱 | 久久精品国产99久久不卡 | 91久久精品美女高潮 | 亚洲第一综合网站 | 五月天丁香久久 | 色婷婷综合网 | 欧美我不卡 | chien国产乱露脸对白 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 91浏览器在线观看 | 亚洲无码精品在线观看 | 老司机精品福利视频 | 人妻无码中文久久久久专区 | 亚洲色成人一区二区三区小说 | 97超视频在线观看 |