设为首页 收藏本站
查看: 761|回复: 0

[经验分享] Tomcat 7 released

[复制链接]

尚未签到

发表于 2017-1-17 06:44:18 | 显示全部楼层 |阅读模式
  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 根据译文有修改。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-329370-1-1.html 上篇帖子: tomcat双向加密 下篇帖子: Tomcat配置集锦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表