- 浏览: 1164859 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (224)
- Web UI (11)
- Dynamic Language (7)
- Framework (9)
- Note & Try (17)
- JavaScript (38)
- Ant/Gant/Maven (2)
- Database (5)
- Software Engineering (13)
- Career (29)
- Team Management (5)
- Performance (12)
- Algorithm (17)
- News & Commets (23)
- System Design (17)
- OO Design (8)
- API Design (3)
- Programming Paradigms (8)
- Asynchronous Programming (5)
- Architecture (6)
最新评论
-
a2320064997:
请问博主,排序的动图是怎么做出来的?
排序算法一览(二):归并类排序、分布类排序和混合类排序 -
你的微笑我得阳光:
试试验证码
reCAPTCHA项目 -
mack:
一般采用json
对象转换的问题 -
fly_hyp:
我也做了一个中文编程软件,叫趣智思成
一些中文编程语言 -
facingSun:
受教了
前端解耦的一个最简单示例
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中配置的例子:
< ?xml version="1.0" encoding="UTF-8"? > < Context path="/Tomcat7demo" aliases="/static=/home/avneet/temp/static" > < /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 = (ByteArrayInputStream)getServletContext().getResourceAsStream("/static/bg.png");
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的复杂性增强可读性。
• 异步处理web的请求,能让使用异步I/O的web应用程序可以移植到不同的web容器中。
异步处理使用非阻塞I/O,每次的HTTP连接都不需要对应一个线程。更少的线程可以为更多的连接提供服务。(这个应该是未来WEB容器的发展必备能力吧)
这对于需要长时间计算处理才能返回结果的情景来说是很有用的,比如产生报表,Web Servce调用等。
• 安全的增强---Servlet 3.0现在使用SSL去加强了会话session的跟踪,代替了原来的cookie和URL重写。(使用SSL对用户体验有什么影响么?比如要求HTTPS?)
6 更容易将Tomcat内嵌到应用去中去,比如JBoss:
象在CATALINA_HOME/conf/server.xml中的很多配置,现在都可以用程序动态去设置了。
下面是CATALINA_HOME/conf/server.xml中的一些相关属性和配置:
< Server > < Service > < Connector port="8080 > < Engine > < Host appBase="/home/avneet/work/Tomcat7demo/dist" / > < /Engine > < /Connector > < /Service > < /Server >
我们可以通过程序去进行动态设置了:
final String CATALINA_HOME = "/home/avneet/work/temp/Tomcat7demo/"; Tomcat Tomcat = new Tomcat(); Tomcat.setBaseDir( CATALINA_HOME ); Tomcat.setPort( 8080 ); Tomcat.addWebapp("/Tomcat7demo", CATALINA_HOME + "/webapps/Tomcat7demo.war"); Tomcat.start(); System.out.println("Started Tomcat"); Tomcat.getServer().await(); //Keeps Tomcat running until it is shut down //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/
译文链接:http://jackyrong.javaeye.com/blog/774685 根据译文有修改。
发表评论
-
大数据时代的隐私安全危机
2013-03-17 23:34 1933315晚会上,网易销售人员为了强调”精准营销”,面对央视镜 ... -
IT外企在中国
2013-03-08 11:46 4107要说这个话题是因为昨天和朋友聊起IT外企在中国就会“变味”的 ... -
Java的日期API真烂
2012-12-08 22:14 2882记得在我刚学Java的时候,真是搞不清楚Date和Cal ... -
观点的碰撞
2012-12-03 02:06 1368几周前我写了一篇文章,《对几个软件开发传统观点的质疑和反 ... -
谈谈盗版软件的问题
2012-11-16 00:01 2096一直很想谈谈这个话 ... -
史上最烂的代码
2012-11-08 22:17 1897其实本没有什么代码是“史上最烂”的,要有也只有“史上更烂 ... -
程序员漫画
2012-10-26 23:26 4173今天有一位同事群发了这样一张有意思的程序员漫画: ... -
编程的未来
2012-10-14 23:38 2528最近在看一本书,加来道雄(Michio Kaku) ... -
如何在局域网内抢带宽
2012-10-06 10:58 5744事情的起因是最近家里买了一台60寸的智能电视,支持点播( ... -
一些中文编程语言
2012-10-02 13:41 20186我自认为本文不是恶搞,让我们本着严肃认真的精神来审视这些 ... -
你真的精通Java吗?
2012-10-01 00:57 25074简历和自我介绍上经常能够读到“精通Java”这样的话,有 ... -
Dart:JavaScript的未来
2012-09-19 20:46 1821最近在关注Dart语言,下面这篇文章译自这里,其实是20 ... -
珍爱生命,远离微博
2012-07-27 15:24 1517好吧,标题党了。 ... -
普通程序员、文艺程序员和2B程序员
2012-07-08 23:37 2126本文纯属扯淡,欢迎对号入座。如果你不知道什么是普通青年、 ... -
那些陪伴我的国产软件,你们都在何方?
2012-07-05 00:05 1862那些陪伴我的国产软件,你们都在何方? 转眼过去 ... -
从“Google地图八位版”看国内的抄袭和微创新
2012-04-02 11:52 2861首先来看一段Google在愚 ... -
亲历2012百度开发者大会
2012-03-23 21:44 2215今天专门请了一天假,去参加百度开发者大会。看图说话。 上 ... -
新iPad发布会现场
2012-03-08 23:08 1557http://player.youku.com/player. ... -
酒桌上的计算机网络
2012-02-01 12:37 4385酒宴开始。 酒杯盛酒,酒杯碰撞,这是物理层; 你要根 ... -
十分钟,了解SOPA和PIPA
2012-01-19 21:35 2795SOPA和PIPA是什么? SOPA ...
相关推荐
Apache Tomcat is developed in an open and participatory environment and released under the Apache License version 2. Apache Tomcat is intended to be a collaboration of the best-of-breed developers ...
The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...
The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...
Apache Tomcat is developed in an open and participatory environment and released under the Apache License version 2. Apache Tomcat is intended to be a collaboration of the best-of-breed developers ...
The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...
前几天要搞一个老掉牙的SSH项目,缺少了这个插件。全网去找,好不容易找到。放到WEB-INF/lib目录,发现不会自动引入,手动引入后,调用java report的程序不报错,但服务器出现放频繁出现it is not java class的错误...
Eclipse中tomcat的配置 Welcome to Apache Tomcat!...The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2 . The A
Apache下载地址:http://httpd.apache.org/ 我下载的是Apache httpd 2.2.27 Released Tomcat 下载地址:http://tomcat.apache.org/download-60.cgi 我下载的是6.0.39的解压版 首先是配置Tomat,因为Tomcat就是集群...
资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程...部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven Spring root vue.js
7. **配置与集成**:集成chexagon/redis-session-manager可能涉及修改Tomcat的server.xml配置文件,添加相关依赖,并配置Redis连接参数。 理解并掌握这些知识点,可以帮助开发者成功地将Redis整合进Tomcat,实现...
如何使用 Maven 创建一个 Java Web 项目(Spring MVC)。 用到的技术/工具: Maven 3.3.3 Eclipse 4.3 JDK 8 Spring 4.1.1.RELEASED Tomcat 7 Logback 1.0.13
7. **Apache Tomcat** 相关:`tomcat-juli.jar`, `tomcat-coyote.jar`, `tomcat-util.jar` 等 - 这些是Apache Tomcat服务器的组成部分,提供了服务器的日志处理、连接器和工具类等功能。 8. **Spring框架**:`...
12. **Tomcat服务器**:`tomcat-juli.jar` 和其他Tomcat相关的jar包,是在本地运行JavaWeb应用的常用服务器,提供Servlet容器。 13. **JUnit测试**:`junit.jar` 用于编写和运行单元测试,确保代码的质量和稳定性。...
8. **部署与集成**:将JavaReport-V3-Enterprise-Released.jar部署到JavaEE应用服务器(如Tomcat、GlassFish、WildFly等)是另一个重要环节。集成到现有项目中可能涉及调整web.xml配置,设置数据源连接,以及处理...
This is JODConverter version 2.2.2, released on 2009-04-11. JODConverter is a Java library for converting office documents into different formats, using OpenOffice.org 2.x or 3.x. See ...
这些工具通常与Java EE应用服务器如Tomcat、Jetty等配合使用,可以生成复杂的报告并导出为PDF、Excel等多种格式。 **总结** Java报表集合是一个全面的学习资源,涵盖了从基础到进阶的Java报表知识。通过学习,...
Blog is simple to network as the carrier, rapid conveniently released their experiences, instant effectively communicate easily with others, then set colorful personalized display in an integrated ...
Apache Tomcat is developed in an open and participatory environment and released under the Apache Software License. Apache Tomcat is intended to be a collaboration of the best-of-breed developers ...
Amazingly, the official javax.servlet and javax.servlet.http packages have been the first Java classes to be officially released as open source. They were transferred to the Apache Software Foundation...
7. 安装步骤:将JavaReport的jar文件(如JavaReport-V3-Enterprise-Released.jar)添加到classpath或当前Web应用的WEB-INF\lib目录,或者Tomcat的common\lib目录,根据需求选择合适的方式进行部署。 总的来说,Java...