设为首页 收藏本站
查看: 632|回复: 0

[经验分享] 责任链模式在Tomcat中的应用

[复制链接]

尚未签到

发表于 2018-12-6 12:42:56 | 显示全部楼层 |阅读模式
1     public ApplicationFilterChain createFilterChain  2         (ServletRequest request, Wrapper wrapper, Servlet servlet) {
  3
  4         // get the dispatcher type
  5         DispatcherType dispatcher = null;
  6         if (request.getAttribute(DISPATCHER_TYPE_ATTR) != null) {
  7             dispatcher = (DispatcherType) request.getAttribute(DISPATCHER_TYPE_ATTR);
  8         }
  9         String requestPath = null;
  10         Object attribute = request.getAttribute(DISPATCHER_REQUEST_PATH_ATTR);
  11
  12         if (attribute != null){
  13             requestPath = attribute.toString();
  14         }
  15
  16         // If there is no servlet to execute, return null
  17         if (servlet == null)
  18             return (null);
  19
  20         boolean comet = false;
  21
  22         // Create and initialize a filter chain object
  23         ApplicationFilterChain filterChain = null;
  24         if (request instanceof Request) {
  25             Request req = (Request) request;
  26             comet = req.isComet();
  27             if (Globals.IS_SECURITY_ENABLED) {
  28                 // Security: Do not recycle
  29                 filterChain = new ApplicationFilterChain();
  30                 if (comet) {
  31                     req.setFilterChain(filterChain);
  32                 }
  33             } else {
  34                 filterChain = (ApplicationFilterChain) req.getFilterChain();
  35                 if (filterChain == null) {
  36                     filterChain = new ApplicationFilterChain();
  37                     req.setFilterChain(filterChain);
  38                 }
  39             }
  40         } else {
  41             // Request dispatcher in use
  42             filterChain = new ApplicationFilterChain();
  43         }
  44
  45         filterChain.setServlet(servlet);
  46
  47         filterChain.setSupport
  48             (((StandardWrapper)wrapper).getInstanceSupport());
  49
  50         // Acquire the filter mappings for this Context
  51         StandardContext context = (StandardContext) wrapper.getParent();
  52         FilterMap filterMaps[] = context.findFilterMaps();
  53
  54         // If there are no filter mappings, we are done
  55         if ((filterMaps == null) || (filterMaps.length == 0))
  56             return (filterChain);
  57
  58         // Acquire the information we will need to match filter mappings
  59         String servletName = wrapper.getName();
  60

  61         // Add the>  62         for (int i = 0; i < filterMaps.length; i++) {
  63             if (!matchDispatcher(filterMaps ,dispatcher)) {
  64                 continue;
  65             }
  66             if (!matchFiltersURL(filterMaps, requestPath))
  67                 continue;
  68             ApplicationFilterConfig filterConfig = (ApplicationFilterConfig)
  69                 context.findFilterConfig(filterMaps.getFilterName());
  70             if (filterConfig == null) {
  71                 // FIXME - log configuration problem
  72                 continue;
  73             }
  74             boolean isCometFilter = false;
  75             if (comet) {
  76                 try {
  77                     isCometFilter = filterConfig.getFilter() instanceof CometFilter;
  78                 } catch (Exception e) {
  79                     // Note: The try catch is there because getFilter has a lot of
  80                     // declared exceptions. However, the filter is allocated much
  81                     // earlier
  82                     Throwable t = ExceptionUtils.unwrapInvocationTargetException(e);
  83                     ExceptionUtils.handleThrowable(t);
  84                 }
  85                 if (isCometFilter) {
  86                     filterChain.addFilter(filterConfig);
  87                 }
  88             } else {
  89                 filterChain.addFilter(filterConfig);
  90             }
  91         }
  92
  93         // Add filters that match on servlet name second
  94         for (int i = 0; i < filterMaps.length; i++) {
  95             if (!matchDispatcher(filterMaps ,dispatcher)) {
  96                 continue;
  97             }
  98             if (!matchFiltersServlet(filterMaps, servletName))
  99                 continue;
  
100             ApplicationFilterConfig filterConfig = (ApplicationFilterConfig)
  
101                 context.findFilterConfig(filterMaps.getFilterName());
  
102             if (filterConfig == null) {
  
103                 // FIXME - log configuration problem
  
104                 continue;
  
105             }
  
106             boolean isCometFilter = false;
  
107             if (comet) {
  
108                 try {
  
109                     isCometFilter = filterConfig.getFilter() instanceof CometFilter;
  
110                 } catch (Exception e) {
  
111                     // Note: The try catch is there because getFilter has a lot of
  
112                     // declared exceptions. However, the filter is allocated much
  
113                     // earlier
  
114                 }
  
115                 if (isCometFilter) {
  
116                     filterChain.addFilter(filterConfig);
  
117                 }
  
118             } else {
  
119                 filterChain.addFilter(filterConfig);
  
120             }
  
121         }
  
122
  
123         // Return the completed filter chain
  
124         return (filterChain);
  
125
  
126     }



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-643990-1-1.html 上篇帖子: ginx+Tomcat负载均衡配置 下篇帖子: Tomcat浏览器地址栏图标
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表