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() {
}
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() {
}
相关推荐
- **web.xml**: 这是Web应用的部署描述文件,负责配置URL映射以及定义Servlet类和URL模式。 - **Web项目的部署**: Web应用通常部署在服务器的webapps目录下,每个项目有独立的目录结构,其中WebRoot目录下的WEB-INF...
JavaWeb应用与开发教程电子教案是一本专注于J2EE平台上的Web应用程序开发的资源,它涵盖了jsp、servlet以及web开发的基础知识和技术。这本教材以其丰富的图文并茂的讲解方式,为初学者和有一定经验的开发者提供了...
这个压缩包包含了书中所有示例的源代码,以及最终的GoodEdu系统,这是一个综合性的Web应用实例,用于模拟教育平台的运作。 首先,我们要了解JavaWeb的基础概念。JavaWeb是指使用Java技术栈开发的Web应用程序,主要...
在JavaWeb应用中,JDBC是数据访问层与数据库交互的主要手段,包括连接数据库、执行SQL语句、处理结果集等操作。 3. **MVC设计模式**:Model-View-Controller模式是Web应用常见的设计模式,用于分离业务逻辑、用户...
JavaWeb应用是一种基于Java技术构建的Web应用程序,它可以运行在任何遵循Servlet规范的容器上,如Tomcat、Jetty、Resin等。根据SUN公司的定义,JavaWeb应用是由一系列的组件构成的集合,包括Servlets、JSP页面、HTML...
JavaWeb技术是构建互联网应用程序的一种强大工具,它基于Java平台,为开发动态、交互式的Web应用提供了丰富的功能。本讲义将重点介绍JavaWeb的基本概念、核心组件以及常用框架。 一、JavaWeb应用概述 JavaWeb应用是...
以上概述了JavaWeb应用开发的基础知识和技术要点,包括Web应用的工作原理、JavaWeb编程的入门概念、Web编程基础、开发环境的搭建、Servlet编程技术和JSP语法。掌握这些核心知识点对于深入理解和实践JavaWeb开发至关...
这份文档,"Java Web应用开发 JavaWeb应用开发期末试卷B卷答案.doc",是一份复习和学习资料,涵盖了Java Web开发的基础知识,包括选择题、填空题、简单题和编程题,帮助学生准备期末考试。 在选择题和填空题中,...
JavaWeb应用开发期末试卷及答案.doc
在JavaWeb应用中,JSP页面在服务器上被编译成Servlet,即一个普通的Java类(.class文件)。 接下来,我们探讨Web应用请求和响应的简要流程。当客户端发起一个HTTP请求至服务器时,服务器接收请求并进行处理,然后给...
3. 默认导入的包:在JSP中,`<%@ page language="java" %>`指令默认导入了`java.lang.*`包,它包含了所有基本类型和对象的类。 4. `page`指令:`<%@ page %>`指令用于定义JSP文件的全局属性,可以在一个页面中使用...
在基于MVC模式的JavaWeb应用设计中,各组件之间的关系更为清晰。具体来说: - **模型**通常由JavaBeans或EJB组成,负责数据处理和存储。 - **视图**通常由JSP页面实现,负责展示数据和处理表单提交。 - **控制器**...
详细地说明在Tomcat中部署JavaWeb应用
JavaWeb技术是构建互联网应用程序的重要工具,它涵盖了多种技术和概念,包括Servlet、JSP、JavaBean、MVC架构、JDBC、EJB、Spring、Hibernate、Struts等。本资源包是青软实训教材的配套资源,旨在为学习者提供实践...
JFinal与SSH在JavaWeb应用开发中的研究 本文研究了JFinal和SSH两种框架在JavaWeb应用开发中的应用和比较。JFinal是一款国产的、基于MVC+ORM的开源JavaWeb框架,其设计目标是开发迅速、代码量少、学习简单、功能强大...
首先,让我们了解ECharts在JavaWeb中的基本应用流程: 1. **前端准备**: - 引入ECharts库:在HTML页面中,我们需要引入ECharts的JavaScript文件,通常是从CDN或者本地资源路径引用。 - 准备容器:在HTML中创建一...
综上所述,这个JavaWeb应用教学网站展示了Struts2框架和MySQL数据库的综合运用,涵盖了Web开发的基本流程和技术要点,包括模型视图控制器设计、数据库操作、前端页面交互以及系统安全性和性能优化。对于学习和理解...
在JavaWeb应用中,MySQL常用于存储和检索数据。文件名"MySQL"可能是指MySQL的安装程序或者包含配置文件、数据库脚本等相关资料。安装MySQL后,开发者可以创建数据库,管理用户权限,执行SQL查询来操作数据。 Tomcat...
在JavaWeb应用中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的标准接口。本项目"JavaWeb-JDBC连接MySql数据库"提供了一个简单的示例,展示了如何使用JDBC来执行SQL查询操作。 首先,我们需要...
在JavaWeb开发中,中文过滤器是一个至关重要的组件,它主要负责解决在数据传输过程中可能出现的中文乱码问题。在Web应用中,由于编码格式不一致或者处理不当,经常会导致中文字符显示为乱码,影响用户体验。中文过滤...