`
jy00509336
  • 浏览: 242552 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

禁用JavaWeb应用中URL上包含的jsessionid

阅读更多

Java Web 应用似乎总有这样的情况,有事没事总是要在 URL 后面加上个 jsessionid,而且似乎不能使用配置的方式直接禁用 URL 传递 sessionid,这样,就比较容易造成安全性的问题,或者在浏览器地址栏里留下一堆很不好看的地址,在 Struts2 中,使用了 url 标签的所有链接,甚至 CSS, JS 这样的东西,都会加上 jsessionid,如何去禁用呢,搜索国内的相关文章,无功而返,询问我们过去的架构师,也没有做过,只好想办法去找国外的网站,找到了这样的一篇文章。

http://randomcoder.com/articles/jsessionid-considered-harmful

通过加入 Filter 的方式过滤掉 URL 中包含的 jsessionid,再重新包装 Response 返回给浏览器。

因为没有太多东西,就不多解释了,大家拿了用就可以了。

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Servlet filter which disables URL-encoded session identifiers.
 * <p/>
 * <pre>
 * Copyright (c) 2006, Craig Condit. All rights reserved.
 * <p/>
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * <p/>
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 * <p/>
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * </pre>
 
*/
@SuppressWarnings(
"deprecation")
public class DisableUrlSessionFilter implements Filter {

    
/**
     * Filters requests to disable URL-based session identifiers.
     
*/
    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
// skip non-http requests
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            
return;
        }

        HttpServletRequest httpRequest 
= (HttpServletRequest) request;
        HttpServletResponse httpResponse 
= (HttpServletResponse) response;

        
// clear session if session id in URL
        if (httpRequest.isRequestedSessionIdFromURL()) {
            HttpSession session 
= httpRequest.getSession();
            
if (session != null) session.invalidate();
        }

        
// wrap response to remove URL encoding
        HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(httpResponse) {
            @Override
            
public String encodeRedirectUrl(String url) {
                
return url;
            }

            @Override
            
public String encodeRedirectURL(String url) {
                
return url;
            }

            @Override
            
public String encodeUrl(String url) {
                
return url;
            }

            @Override
            
public String encodeURL(String url) {
                
return url;
            }
        };

        
// process next request in chain
        chain.doFilter(request, wrappedResponse);
    }

    
/**
     * Unused.
     
*/
    
public void init(FilterConfig config) throws ServletException {
    }

    
/**
     * Unused.
     
*/
    
public void destroy() {
    }

 

分享到:
评论

相关推荐

    攻击JavaWeb应用.pdf

    - **web.xml**: 这是Web应用的部署描述文件,负责配置URL映射以及定义Servlet类和URL模式。 - **Web项目的部署**: Web应用通常部署在服务器的webapps目录下,每个项目有独立的目录结构,其中WebRoot目录下的WEB-INF...

    JavaWeb应用与开发教程电子教案

    JavaWeb应用与开发教程电子教案是一本专注于J2EE平台上的Web应用程序开发的资源,它涵盖了jsp、servlet以及web开发的基础知识和技术。这本教材以其丰富的图文并茂的讲解方式,为初学者和有一定经验的开发者提供了...

    JavaWeb应用与开发郭克华源代码

    这个压缩包包含了书中所有示例的源代码,以及最终的GoodEdu系统,这是一个综合性的Web应用实例,用于模拟教育平台的运作。 首先,我们要了解JavaWeb的基础概念。JavaWeb是指使用Java技术栈开发的Web应用程序,主要...

    javaweb应用程序设计(栗菊民编著)课本源代码

    在JavaWeb应用中,JDBC是数据访问层与数据库交互的主要手段,包括连接数据库、执行SQL语句、处理结果集等操作。 3. **MVC设计模式**:Model-View-Controller模式是Web应用常见的设计模式,用于分离业务逻辑、用户...

    第一个JavaWeb应用

    JavaWeb应用是一种基于Java技术构建的Web应用程序,它可以运行在任何遵循Servlet规范的容器上,如Tomcat、Jetty、Resin等。根据SUN公司的定义,JavaWeb应用是由一系列的组件构成的集合,包括Servlets、JSP页面、HTML...

    JavaWeb讲义:JavaWeb应用简介

    JavaWeb技术是构建互联网应用程序的一种强大工具,它基于Java平台,为开发动态、交互式的Web应用提供了丰富的功能。本讲义将重点介绍JavaWeb的基本概念、核心组件以及常用框架。 一、JavaWeb应用概述 JavaWeb应用是...

    javaWEB应用开发讲义

    以上概述了JavaWeb应用开发的基础知识和技术要点,包括Web应用的工作原理、JavaWeb编程的入门概念、Web编程基础、开发环境的搭建、Servlet编程技术和JSP语法。掌握这些核心知识点对于深入理解和实践JavaWeb开发至关...

    Java Web应用开发 JavaWeb应用开发期末试卷B卷答案.doc

    这份文档,"Java Web应用开发 JavaWeb应用开发期末试卷B卷答案.doc",是一份复习和学习资料,涵盖了Java Web开发的基础知识,包括选择题、填空题、简单题和编程题,帮助学生准备期末考试。 在选择题和填空题中,...

    JavaWeb应用开发期末试卷及答案.doc

    JavaWeb应用开发期末试卷及答案.doc

    攻击JavaWeb应用1-9

    在JavaWeb应用中,JSP页面在服务器上被编译成Servlet,即一个普通的Java类(.class文件)。 接下来,我们探讨Web应用请求和响应的简要流程。当客户端发起一个HTTP请求至服务器时,服务器接收请求并进行处理,然后给...

    Java Web应用开发 JavaWeb应用开发期末试卷A卷.doc

    3. 默认导入的包:在JSP中,`&lt;%@ page language="java" %&gt;`指令默认导入了`java.lang.*`包,它包含了所有基本类型和对象的类。 4. `page`指令:`&lt;%@ page %&gt;`指令用于定义JSP文件的全局属性,可以在一个页面中使用...

    基于MVC模式的JavaWeb应用设计-张黎明

    在基于MVC模式的JavaWeb应用设计中,各组件之间的关系更为清晰。具体来说: - **模型**通常由JavaBeans或EJB组成,负责数据处理和存储。 - **视图**通常由JSP页面实现,负责展示数据和处理表单提交。 - **控制器**...

    在Tomcat中部署JavaWeb应用

    详细地说明在Tomcat中部署JavaWeb应用

    JAVAWeb技术与应用-青软实训教材配套资源

    JavaWeb技术是构建互联网应用程序的重要工具,它涵盖了多种技术和概念,包括Servlet、JSP、JavaBean、MVC架构、JDBC、EJB、Spring、Hibernate、Struts等。本资源包是青软实训教材的配套资源,旨在为学习者提供实践...

    _JFinal与SSH在JavaWeb应用开发中的研究.pdf

    JFinal与SSH在JavaWeb应用开发中的研究 本文研究了JFinal和SSH两种框架在JavaWeb应用开发中的应用和比较。JFinal是一款国产的、基于MVC+ORM的开源JavaWeb框架,其设计目标是开发迅速、代码量少、学习简单、功能强大...

    ECharts在javaWeb中应用的页面及代码资源

    首先,让我们了解ECharts在JavaWeb中的基本应用流程: 1. **前端准备**: - 引入ECharts库:在HTML页面中,我们需要引入ECharts的JavaScript文件,通常是从CDN或者本地资源路径引用。 - 准备容器:在HTML中创建一...

    JavaWeb应用教学网站(Struts2+Mysql)

    综上所述,这个JavaWeb应用教学网站展示了Struts2框架和MySQL数据库的综合运用,涵盖了Web开发的基本流程和技术要点,包括模型视图控制器设计、数据库操作、前端页面交互以及系统安全性和性能优化。对于学习和理解...

    JavaWeb开发用到的软件

    在JavaWeb应用中,MySQL常用于存储和检索数据。文件名"MySQL"可能是指MySQL的安装程序或者包含配置文件、数据库脚本等相关资料。安装MySQL后,开发者可以创建数据库,管理用户权限,执行SQL查询来操作数据。 Tomcat...

    JavaWeb-JDBC连接MySql数据库

    在JavaWeb应用中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的标准接口。本项目"JavaWeb-JDBC连接MySql数据库"提供了一个简单的示例,展示了如何使用JDBC来执行SQL查询操作。 首先,我们需要...

    javaweb中文过滤器

    在JavaWeb开发中,中文过滤器是一个至关重要的组件,它主要负责解决在数据传输过程中可能出现的中文乱码问题。在Web应用中,由于编码格式不一致或者处理不当,经常会导致中文字符显示为乱码,影响用户体验。中文过滤...

Global site tag (gtag.js) - Google Analytics