成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

啥,Tomcat里竟然還有特權應用?

開發 開發工具
在Tomcat部署的應用里,我們一般意義上都是指普通的應用,但對于一些特殊的應用,需要執行一些特別的操作,這就是我們今天提到的 Tomcat 內的特權應用(privileged app)。

在 Tomcat 部署的應用里,我們一般意義上都是指普通的應用,大家可以執行的操作等都是一樣的,一條起跑線上的,沒有區別。

但對于一些特殊的應用,需要執行一些特別的操作,比如官方默認提供的 manager應用,可以進行應用的啟動、停止、部署等一系列操作。這些操作的背后,是 Tomcat默認包含的 ManagerServlet 實現的, manager 應用實現的,是對于該 Servelet 的調用。

那我們自己寫一個應用去調用這個 ManagerServlet 不也一樣可以嗎?

答案是不行的,至少直接操作不行,需要配置。這里就是我們今天提到的 Tomcat 內的特權應用(privileged app)。

manager 應用就是自帶的一個特權應用,因此它可以直接調用 ManagerServlet 進行一些容器內部的操作。

我們單獨部署的其他應用,就會被限制調用這些容器提供的內部組件,比如一些 Servlet、Filter、Listener。

這些限制資源進行檢查時,分為兩種類型。

1. 一類是通過類型來進行判斷,比如 Servlet 中,ManagerServlet、HTMLManagerServlet 這些都被稱為ContainerServlet。實現了相同的接口。

2. 還有一類是在配置文件中指定的,有三個文件:

  • RestrictedFilters.properties
  • RestrictedListeners.properties
  • RestrictedServlets.properties

位于 org.apache.catalina.core 包中。

這些內部在 DefaultInstanceManager 初始化時進行解析,例如 servlet的內容解析后是這些:

 servlet的內容解析

這些內容也是容器提供的一些功能的實現,比如 GCI 請求處理, JMXProxyServlet 會將 JMX 的屬性 dump 出來等等。

特權應用的配置

那怎樣能讓單獨開發的應用成為特權應用,能調用這些容器的功能呢?

之前的文章介紹過應用的部署描述文件context.xml ( Tomcat目錄部署與Context描述文件context.xml),這次我們的升級特權操作也是需要在這里進行。

具體來說,在應用部署時,將應用的 Context 對象中 privileged屬性設置為 true。例如 manager 應用的配置是這樣的,文件位于于 manager 的META-INF 目錄中,單獨開發時可以參考:

  1. <Context antiResourceLocking="false" privileged="true" > 

這樣配置之后,在應用部署時就會將代表應用的 StandardContext 對象中 privileged 屬性設置為true,后面會讀取使用。

特權應用的工作原理

應用在啟動時,會將 DefaultInstanceManager 做為其 instanceManager。該屬性在后面 Servlet、Filter、Listener 這些組件加載時使用,做為實例管理器,進行 newInstance的管理。

以 Servlet 為例,有些 loadOnStartup 的 Servlet,會在部署啟動應用時直接生成實例。

在 loadServlet 階段時,會先通過 Wrapper 獲取父容器 Context 的 instanceManager,再通過 instanceManager 來加載具體的 Servlet class。

以下為 instanceManager 進行 newInstace 時的邏輯

  1. public Object newInstance(String className)  { 
  2.        Class<?> clazz = loadClassMaybePrivileged(className, classLoader); 
  3.         return newInstance(clazz.newInstance(), clazz); 
  4.     } 

在loadClassMaybePrivileged中,對于catalina包中的 class,會使用ServerClassLoader 來進行加載,除了通過不同的classLoader加載外,還會進行上面說的 privileged 檢查。

  1. private void checkAccess(Class<?> clazz) { 
  2.     if (privileged) { 
  3.         return; 
  4.     } 
  5.     if (Filter.class.isAssignableFrom(clazz)) { 
  6.         checkAccess(clazz, restrictedFilters); 
  7.     } else if (Servlet.class.isAssignableFrom(clazz)) { 
  8.         if (ContainerServlet.class.isAssignableFrom(clazz)) { 
  9.             throw new SecurityException("Restricted (ContainerServlet) " + 
  10.                     clazz); 
  11.         } 
  12.         checkAccess(clazz, restrictedServlets); 
  13.     } else { 
  14.         checkAccess(clazz, restrictedListeners); 
  15.     } 
  16. // 這里檢查配置文件中的內容 
  17. private void checkAccess(Class<?> clazz, Properties restricted) { 
  18.     while (clazz != null) { 
  19.         if ("restricted".equals(restricted.getProperty(clazz.getName()))) { 
  20.             throw new SecurityException("Restricted " + clazz); 
  21.         } 
  22.         clazzclazz = clazz.getSuperclass(); 
  23.     } 

對于 priviledged 應用,之后的 checkAccess 就直接跳過,否則會判斷是否是 ContainerServlet,是否在配置文件中進行限制等,只有都檢查通過才可以進行 使用。

例如 普通的應用在使用HTMLManagerServlet ,此時由于限制檢查,會提示500。

 

所以,之后有需要使用容器提供的功能時,可以將應用升級為特權應用,然后調用容器提供的高級功能。

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2010-03-04 15:38:01

2020-06-17 07:56:19

前端存儲數據

2024-10-09 09:07:10

JVM優化String類JDK1.6

2009-07-02 17:59:51

2021-07-26 06:57:59

Synchronize線程安全

2019-06-14 08:48:46

Tomcat日志SpringBoot

2019-07-01 10:48:13

Tomcat中間件TPM

2017-03-01 11:15:43

LinuxKali LinuxSSH服務

2021-03-05 18:36:59

日志Jar包代碼

2021-03-04 09:50:23

Redis網絡通信Redis服務器

2021-05-06 07:00:28

Excel數據技巧

2020-10-16 09:09:56

代碼業務模型

2023-02-15 11:58:29

2021-04-16 20:47:42

Go 指令函數

2020-09-23 16:05:42

Python手繪圖表編程語言

2019-07-15 15:45:00

5.0Gs PCIe 4.0

2017-12-28 10:27:28

2014-12-09 14:38:15

JavaScript6

2022-04-24 16:00:15

LinuxLinux命令ls命令

2019-10-28 10:19:27

JVM 類加載器Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色欧美综合 | 久久伊人精品一区二区三区 | 成人在线视频一区 | 国产精品日本一区二区不卡视频 | 久久99精品久久久久婷婷 | 久草a√ | 亚洲一区二区视频在线播放 | 欧美日韩精品区 | 国产成人精品一区二区三区四区 | 欧美一区二区三区久久精品视 | 在线观看视频h | 国产精品黄色 | 欧洲一级黄 | 国产精品一区二区在线播放 | 久久久久久国产精品久久 | 国产精品久久久久久久免费大片 | 先锋资源站 | 中文字幕一区二区三区乱码图片 | 日韩中文视频 | 欧美日韩亚洲一区 | 91精品国产91久久久久久吃药 | 久久精品亚洲 | 在线免费看91 | 播放一级毛片 | 精品一区在线免费观看 | 成人性视频免费网站 | 深夜福利亚洲 | 精品网站999www | 狠狠操天天干 | av黄色免费在线观看 | 欧美日韩在线一区二区 | 国产精品国产 | 国产aⅴ爽av久久久久久久 | 三级视频久久 | 亚洲精品久久久久久一区二区 | 欧美 日韩 国产 在线 | 91av视频在线免费观看 | 欧美视频免费在线 | 综合二区 | 国产精品无码久久久久 | 成人亚洲精品 |