Tomcat 7 released!

原创 2011年01月16日 22:03:00

废话一概不说,Change Log见此: http://tomcat.apache.org/tomcat-7.0-doc/changelog.html

看看都有什么新Feature(最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性):

1. 使用随机数去防止跨站脚本攻击;

2. 改变了安全认证中的jessionid的机制,防止session攻击;

3. 内存泄露的侦测和防止;

4. 在war文件外使用别名去存储静态内容;

5 对Servlet 3.0,JSP 2.2和JSP-EL 2。2的支持;

6 更容易将Tomcat内嵌到应用去中去,比如JBoss;

7 异步日志记录。

详细分解:

1. 使用随机数去防止跨站脚本攻击:

Wikipedia将跨站请求伪造攻击(Cross Site Request forgery,CSRF)定义为:“一种影响Web应用的恶意攻击。CSRF让用户当进入一个可信任的网页时,被强行执行恶意代码。

Tomcat 7中有一个servlet过滤器,用于将随机数存储在用户每次请求处理后的seesion会话中。这个随机数,必须作为每次请求中的一个参数。 Servlet过滤器然后检查在请求中的这个随机数是否与存储在用户session中的随机数是一样的。如果它们是相同的,该请求是判断来自指定的网站。如果它们是不同的,该请求被认为是从其他网站发出并且会被拒绝。

  • String previousNonce = req.getParameter(Constants.CSRF_NONCE_REQUEST_PARAM);      
  • String expectedNonce = (String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME); 
    •  
      •  
        •  
          •  
            •  
              •           < c:url var="url" value="/show" >
          •                     < c:param name="id" value="0" / >
          •                     < c:param name="org.apache.catalina.filters.CSRF_NONCE" value="${session.org.apache.catalina.filters.CSRF_NONCE}" / >
          •           < /c:url >

    2. 改变了安全认证中的jessionid的机制,防止session攻击:

    原来的问题就是Cookie的JSESSIONID参数被其他主机劫持,问题很简单,看看是怎么解决的:

    Tomcat 7对此的解决方案是一个补丁,它在验证后改变了jsessionid。也就是说,如果原jsessionid的用户并不在线,那么上线创建会话时验证用户,如果发现他是一个合法者,除了允许访问外,原有jsessionid废除,使用新值。由此可见,倘若该用户会话属于存活状态,如果第三方主机会话劫持并以该用户访问Tomcat,其安全机制并无法起到作用。

    3. 内存泄露的侦测和防止:

    只有有限的能力,包括部分如下情形:

    • JDBC驱动的注册

    • 一些日志框架

    • 在ThreadLocals中保存了对象但没有删除它们

    • 启动了线程但没停止

    以及部分 Java API 存在内存泄漏的场景:

    使用 javax.imageio API ( Google Web Toolkit会用到)

    使用 java.beans.Introspector.flushCaches()

    使用 XML 解析器

    使用 RMI 远程方法调用

    从 Jar 文件中读取资源

    4. 在war文件外使用别名去存储静态内容:

    Web应用程序需要静态资源文件,比如象CSS,Javascript和视频文件、图片文件等。通常都把它们打包放在war文件中,这将增加了WAR文件的大小并且导致很多重复的加载静态资源。一个比较好的解决方法是使用Apache HTTP服务器去管理这些静态文件资源。也有一种做法是使用Linux上面的mount功能,配置share目录来实现,当然静态资源还是用Apache服务器更有效率。

    Tomcat允许使用新的aliases属性,指出静态文件资源的位置,可以通过使用Classloader.getResourceAsStream('/static/...')或者在链接中嵌入的方法让Tomcat去解析绝对路径,下面是一个在context.xml中配置的例子:

    1. < ?xml version="1.0" encoding="UTF-8"? >  
    2. < Context path="/Tomcat7demo" aliases="/static=/home/avneet/temp/static" >  
    3. < /Context >

      假设/home/avneet/temp/static这个文件夹存放有一张图片bg.png,如果war文件以Tomcat7demo的名字部署,那么可以通过以下三个方式去访问这张图片:

      1.直接访问 http://localhost:8080/Tomcat7demo/static/bg.png

      2.在HTML链接中访问:< img src="/Tomcat7demo/static/bg.png" / >

      3.通过JAVA代码访问: ByteArrayInputStream bais =

    4. (ByteArrayInputStream)getServletContext().getResourceAsStream("/static/bg.png");

    5. 5 对Servlet 3.0,JSP 2.2和JSP-EL 2.2的支持:

      Servlet 3的增强特性有:

      • 可以在POJO或者过滤器filters中使用annotations注释(在web.xml中不再需要再进行设置了)

      • 可以将web.xml分块进行管理了。也就是说,用户可以编写多个xml文件,而最终在web.xml中组装它们,这将大大降低web.xml的复杂性增强可读性。

    6. • 异步处理web的请求,能让使用异步I/O的web应用程序可以移植到不同的web容器中。

    7. 异步处理使用非阻塞I/O,每次的HTTP连接都不需要对应一个线程。更少的线程可以为更多的连接提供服务。(这个应该是未来WEB容器的发展必备能力吧)

    8. 这对于需要长时间计算处理才能返回结果的情景来说是很有用的,比如产生报表,Web Servce调用等。

      • 安全的增强---Servlet 3.0现在使用SSL去加强了会话session的跟踪,代替了原来的cookie和URL重写。(使用SSL对用户体验有什么影响么?比如要求HTTPS?)

    6 更容易将Tomcat内嵌到应用去中去,比如JBoss:

    象在CATALINA_HOME/conf/server.xml中的很多配置,现在都可以用程序动态去设置了。

    下面是CATALINA_HOME/conf/server.xml中的一些相关属性和配置:

    1. < Server >  
    2. < Service >  
    3. < Connector port="8080 >  
    4. < Engine >  
    5. < Host appBase="/home/avneet/work/Tomcat7demo/dist" / >  
    6. < /Engine >  
    7. < /Connector >  
    8. < /Service >  
    9. < /Server >

    我们可以通过程序去进行动态设置了:

    1. final String CATALINA_HOME = "/home/avneet/work/temp/Tomcat7demo/";  
    2. Tomcat Tomcat = new Tomcat();  
    3. Tomcat.setBaseDir( CATALINA_HOME );  
    4. Tomcat.setPort( 8080 );  
    5. Tomcat.addWebapp("/Tomcat7demo", CATALINA_HOME + "/webapps/Tomcat7demo.war");  
    6. Tomcat.start();  
    7. System.out.println("Started Tomcat");  
    8. Tomcat.getServer().await(); //Keeps Tomcat running until it is shut down  
    9. //Webapp Tomcat7demo accessible at http://localhost:8080/Tomcat7demo/ 

    7 异步日志记录:

    包括了一个异步日志记录器(AsyncFileHandler)。使用AsyncFileHandler,时,只需要在CATALINA_HOME/conf/logging.properties中把FileHandler全部替换为AsyncFileHandler就可以了。当有日志发向AsyncFileHandler时,日志被加入到队列中(java.util.concurrent.LinkedBlockingDeque)并且方法调用的信息会马上返回不需要等待I/O写到磁盘中。当类加载器加载AsyncFileHandler时,会有一个单独的线程启动,这个线程会从队列中读取日志信息并且写到磁盘中去。

    Tomcat 7的自带程序例子有两个servlets,一个是演示了如何采用随机数的办法防止CSRF攻击,另外一个是描述了使用aliases。更新一下web/META-INF/context.xml,指出图片的绝对路径即可顺利运行。

    通过ant运行build.xml去将它们部署到Tomcat 7中,使用如下两个地址访问:

    • http://localhost:8080/Tomcat7demo/csrf/

    http://localhost:8080/Tomcat7demo/alias/

    原文链接:Top 7 Features in Tomcat 7: The New and the Improved

    译文链接:http://jackyrong.javaeye.com/blog/774685 根据译文有修改。

    相关文章推荐

    Firefox 7 has just released!

    Firefox 7 release已经有一段时间了(一周),一直在犹豫是否要升级。上次升级有一个不愉快的情节:我的quick notes因为升级而无法读出来了。那些文章就在那里,但是读不出来。当然这次...
    • yaaron
    • yaaron
    • 2011年10月03日 12:51
    • 277

    Cheat-Test released the latest modification for Sun 310-200

    Sun 310-200 test studyHow is it that we can guarantee your success and passing your 310-200 exam? Si...

    Storm 1.0.0 released

    The Apache Storm community ispleased to announce that version 1.0.0 Stable has been released and isa...

    OpenCart V1.5.6 发布!Released!

    众所期待的新版本OpenCart V1.5.6终于发布了!我们一直在努力让OpenCart成为一个更加具有用户友好性和通用性的系统。我们努力地超前考虑并进行整合,在与竞争对手相比具有更为优秀功能的解决...

    TypeScript Released to Improve JavaScript Development

    Microsoft released TypeScript this week as part of its efforts to improve JavaScript application d...

    JavaEE应用基础平台 AOS-V0.1 RELEASED

    AOS应用基础平台基于JavaEE技术体系,以“标准功能可复用、通用模块可配置、行业需求快速开发、异构系统无缝集成”为目标,为软件开发团队提供高效可控、随需应变、快速实现业务需求的全栈式技术解决方案。...

    软件版本号详解: 什么是Alpha, Beta, RC,Released

    1. 软件版本阶段说明 Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。 * Beta版: 该版本...
    • lousest
    • lousest
    • 2013年01月09日 22:03
    • 370

    安卓:解决应用前后台切换报The surface has been released错误;PhoneStateListener实现通话状态的监听

    安卓:解决应用前后台切换报The surface has been released错误;PhoneStateListener实现通话状态的监听。...

    Ceph v12.1.0 Luminous RC released

    ceph L 版本终于出了一个候选release版本。来看看都有哪些新功能吧。本文翻译自官网:v12.1.0 Luminous RC released Github:https://github.c...

    DB Query Analyzer 6.02 is released, 71 articles concerned have been published

    DB Query Analyzer 6.02 is released, 71 articles concerned have been published   DB Query Analyzer is...
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:Tomcat 7 released!
    举报原因:
    原因补充:

    (最多只允许输入30个字)