Tomcat v7.0加载异常 - 将servlet ssi标记为不可用

Bin*_*uso 5 eclipse tomcat

新安装的Tomcat v7.0和Eclipse.试图加载SSI Servlet支持.根据Tomcat指令修改了context.xml和web.xml.

Context.xml(显示相关片段):

<Context reloadable="true" privileged="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>


</Context>
Run Code Online (Sandbox Code Playgroud)

web.xml(显示相关片段):

   <servlet>
        <servlet-name>ssi</servlet-name>
        <servlet-class>
          org.apache.catalina.ssi.SSIServlet
        </servlet-class>
        <init-param>
          <param-name>buffered</param-name>
          <param-value>1</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ssi</servlet-name>
        <url-pattern>*.shtml</url-pattern>
    </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

但我仍然得到以下加载异常:

Mar 23, 2012 12:06:00 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet  threw load() exception
java.lang.SecurityException: Restricted class org.apache.catalina.ssi.SSIServlet
    at 

org.apache.catalina.core.DefaultInstanceManager.checkAccess(DefaultInstanceManager.java:548)
        at org.apache.catalina.core.DefaultInstanceManager.checkAccess(DefaultInstanceManager.java:539)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5001)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5289)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Mar 23, 2012 12:06:00 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet ssi as unavailable
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的东西.任何人都可以建议如何解决这个问题?谢谢!

小智 8

我将该privileged="true"属性添加到context.xml根文件中的context元素.它为我解决了CGI的安全例外.

我发现通过这个网站.


Chr*_*ite 0

所以只是为了确认(因为这对我有用):

  • 下载 Tomcat 7.0.26 (zip)
  • 拆封
  • 修改${TOMCAT_HOME)/conf/web.xml
    • 取消注释第 276 行左右的 SSI servlet 定义
    • 取消注释第 370 行周围的 SSI servlet 映射
  • 修改${TOMCAT_HOME}/conf/tomcat-users.xml
    • 添加了 admin-gui 的角色
    • 添加了具有 admin-gui 角色的用户 admin
  • 向 ${TOMCAT_HOME}/webapps/host-manager 添加了一个简单的 ssi.shtml 页面:

    <!--#printenv -->

  • 启动Tomcat,没有错误,http://localhost:8080/host-manager/ssi.shtml按预期工作

最后 - 您正在编辑 Web 应用程序的 context.xml,而不是 ${TOMCAT_HOME}/conf 文件夹中的 web.xml - 我想是这样,因为您的示例具有 WatchedResource 元素