文档章节

Tomcat 7/8 不支持 Invoker Servlet 的解决方法

acmfly
 acmfly
发布于 2014/09/07 14:58
字数 932
阅读 158
收藏 0

在Tomcat 7以前的版本中使用Invoker Servlet提供的映射机制带来的安全问题包括:

1、应用的类名直接暴露在路径中,这是显而易见的安全问题。

2、缺乏配置信息造成类调用的混乱。在有同名类的时候,服务器无法确定调用这个类还是那个类。而在web.xml中每个应用都有明确的描述和路径映射,对应用的运行有明确的线路,且更有利于应用的维护。

3、存在后门的危险。一个被映射在不同路径的类有可能利用Invoker机制通过类名被访问到,这样就绕过了系统的安全机制。

4、还是存在后门的危险。应用中经常会在公共领域使用第三方类库,如果这个第三方类库中包含有漏洞,那么它就有可能通过Invoker机制被激活。

Tomcat 7实现的Servlet 3.0标准不再支持这个Invoker Servlet类,貌似给应用的原型开发阶段带来不便,但新标准引入了更加便捷和安全的解决方法:

一、使用应用描述文件web.xml描述你的应用。

为每个一个类,在web.xml中添加描述信息,虽然这是一个繁琐的过程,尤其对于开发阶段来说,但这是最安全和规范的做法。例如一个简单的测试应用HelloServlet,其部分源码如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {

    /* snip... */

}



我们可以在web.xml中为其进行如下配置,使其地址映射在/sayHello

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="false" >

<display-name>Test Servlet</display-name>
<description>
Test Servlet
</description>

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/sayHello</url-pattern>
</servlet-mapping>

</web-app>



二、在应用的源码中使用注解进行应用的自描述。

Tomcat 7实现的Servlet 3.0标准引入一个新的特性,叫annotaion,这里且称为注解,它包括有多种注解,具体可参见官方的文档,其中有一个注解@WebServlet。在主类的声明前插入这个注解可以实现对当前类的配置,服务器会根据这个信息正确调用当前类。这样就省去了配置web.xml,极大得方便了开发阶段应用的配置过程。@WebServlet有很多选项可以进行应用配置,最简单的例子就是给出路径映射@WebServlet(“/path”),更复杂的情况是给出应用名,甚至为一个应用给出多个替代路径@WebServlet(name=”TestServlet”, urlPatterns={“/path”, “/alt”})。

同样为上面的简单测试例子,只把类名改为HelloServletAgain,这次用注解实现应用配置,并映射了两个地址,而web.xml不需要进行任何配置。注意两点:一是要引入包javax.servlet.annotation.*,二是web.xml中web-app项的metadata-complete属性必须设为false。部分源码如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

/** Simple servlet used to test server. **/

@WebServlet(name=”HelloServletAgain”, urlPatterns={“/sayHello”, “/sayHelloAlt”})
public class HelloServletAgain extends HttpServlet {

    /* snip... */

}

通过访问/sayHello或/sayHelloAlt,就可以访问这个应用。

本文转载自:http://zynd.net/archives/tomcat-without-invoker-servlet.html

acmfly
粉丝 17
博文 165
码字总数 164332
作品 0
青岛
私信 提问
jsp中include乱码的三种解决方案

问题描述:<%@ include file="/footer.html" %> 的中文乱码问题 第一种情况可以修改被include的文件: 1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上代码: <%@ pa...

扁-哥
2013/04/12
526
0
Servlet简介与Servlet和HttpServlet运行的流程

1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序。 > Servlet实际上就是一个接口。 - 狭义上的Servlet,指的就是Servlet接口 - 广义上的我们认为凡是实现Servlet...

architect刘源源
2018/09/09
41
0
使用Spring HTTP invoker进行远程调用

6.4 使用Spring HTTP invoker进行远程调用 Spring 开发小组意识到在RMI服务和基于 HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另...

红薯
2010/08/15
5.2K
1
Eclipse JSP 热部署

Date:2012-10-16 Environment:Eclipse 4.2,Tomcat 7 昨天,我将Eclipse的JSP项目部署到tomcat的webapps目录下.然后运行网站. 我在eclipse下修改JSP网页内容或直接在webapps的项目中修改,刷新浏...

陈好
2012/10/16
1K
0
Apache Tomcat8必备知识

一、Apache Tomcat 8介绍 Apache Tomcat 8支持Java EE 7规范,包括Java Servlet 3.1、JSP 2.3、Java统一表达式语言EL 3.0等。 我们可以来看看Tomcat最近几个版本分别支持的JavaEE规范。 --...

山海经
2014/05/01
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
21分钟前
4
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
24分钟前
36
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
25分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
今天
6
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部