`
istone
  • 浏览: 63204 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsessionid的解决办法

阅读更多

用户首次登陆系统时,会在地址后面加个jsessionid=xxx导致从外网不能登陆系统,网上搜了一些资料,通过加过滤器的办法解决:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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>
*/

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() {
	}
}

 原文地址:http://randomcoder.com/articles/jsessionid-considered-harmful

分享到:
评论

相关推荐

    jsessionid存在的问题及其解决方案

    本文将深入探讨`jsessionid`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来阐述如何在实际应用中处理这些问题。 首先,`jsessionid`是Java Servlet容器为了跟踪用户...

    Set-Cookie: JSESSIONID=8AB51DC4244907FD9EBB063C7FD73CBA; Path=/; HttpOnly

    然而,这种处理办法治标不治本,当用户第一次访问的时候,Cookie 还是会记录原 Path 属性,之后的再次访问,属性会被容器置换。 2. 从容器本身解决 从容器本身解决的思路是通过配置容器的设置来处理问题。例如,...

    IFrame中Session丢失的解决办法

    在探讨“IFrame中Session丢失的解决办法”这一主题时,我们首先需要理解Session与IFrame的基本概念及其在Web开发中的交互方式。Session是Web应用中用于存储用户特定信息的一种机制,它允许开发者在用户的会话期间...

    关于集群 cook 覆盖问题 及解决方法

    **三、解决办法** 1. **设置不同的Cookie名称**:在每个应用的Weblogic.xml配置文件中,可以通过设置`&lt;session-descriptor&gt;`标签内的`cookie-name`属性,为每个应用分配独特的Cookie名称,避免名称冲突。 2. **...

    一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法

    一个服务器上搭建了多个tomcat或者weblogic,...这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。

    IE的cookie机制导致的session问题及解决办法.doc

    jsessionid=" + sid); %&gt; ``` 这种方式虽然避免了IE的Cookie限制,但可能引入新的安全风险,因为Session ID将暴露在URL中,容易被恶意用户截获。因此,在实施前需评估安全性和性能影响。 ### 结论 IE浏览器特有...

    java中Servlet Cookie取不到值原因解决办法

    java中Servlet Cookie取不到值原因解决办法 java中Servlet Cookie取不到值原因解决办法是指在使用Java Servlet时,无法获取Cookie值的问题。这种情况通常发生在使用request.getCookies()方法时,却无法获取到Cookie...

    jquery uploadify 在FF下无效的解决办法

    在使用jQuery的插件uploadify时,开发者们可能会遇到在Firefox(FF)浏览器下插件无法正常工作的...通过本文所介绍的在URL中附加jsessionid参数的方法,往往能够解决大多数情况下uploadify在Firefox中不工作的问题。

    PHP关于IE下的iframe跨域导致session丢失问题解决方法

    解决办法同样是确保正确设置Cookie策略,使得Session能够在不同的页面间正确传递。 总的来说,针对IE浏览器中iframe跨域导致Session丢失的问题,关键在于理解浏览器对跨域Cookie的处理方式,特别是IE的独特限制。...

    解决java后台登录前后cookie不一致问题

    但这种方法只是临时解决了表面现象,没有从根本上解决问题。因为每次用户访问都需要重新验证身份,可能会增加服务器负载。 ```javascript // 删除cookie中的JSESSIONID document.cookie = "JSESSIONID=0;path=/;...

    uploadify在Firefox下丢失session问题的解决方法

    本文将详细探讨一个特定的问题,即“uploadify在Firefox下丢失session问题的解决方法”,这是一个常见的前端上传插件与后端session管理不兼容的问题,特别是在使用JSP和Firefox浏览器时。 首先,了解session的基本...

    彻底解决android用HttpUrlConnection与web服务器之间session保持问题

    **解决方法** 1. **手动设置Cookie**:在发起HTTP请求时,需要在HttpURLConnection的请求头中添加已有的Session ID。可以使用`HttpURLConnection.setRequestProperty("Cookie", "JSESSIONID=value")`来设置Cookie。...

    解决因浏览器关闭导致购物车数据丢失问题

    第二种方法(注释部分)则是将一个`BuyCart`对象(可能是封装了购物车数据的类)存储在会话中,并设置名为"JSESSIONID"的Cookie,这通常是服务器默认设置的会话跟踪Cookie。这种方法与第一种类似,只是将恢复的数据...

    java实现多次HttpURLConnection共享session

    // 解析cookieHeader,例如:JSESSIONID=123456; Path=/; HttpOnly // 使用CookieManager的CookiePolicy接受所有Cookie cookieManager.getCookieStore().add(null, parseCookie(cookieHeader)); } ``` 4. 共享...

    flex 利用FileReference上传firefox报2038错误

    - **其他环境下的实现**:对于使用其他服务器端技术(如ASP.NET等)的应用程序,也可以考虑类似的方法来解决会话管理问题。尽管原文提到没有找到具体的解决方案,但思路是相似的,即通过URL参数的形式传递会话标识...

    Nignx 连接tomcat时会话粘性问题分析及解决方法

    然而,这种方法无法处理服务器宕机后的会话转移问题,可能导致用户 session 失效。 **解决方案探讨** 1. **ip_hash**:通过将每个 IP 地址的请求映射到固定的后端服务器,实现会话粘性。但是,ip_hash 不适用于以下...

    java版 jquery uploadify 通过Flash实现多文件上传 IE 和FireFox 兼容

    所以解决方案如下: 方法一:url中紧跟servlet/jsp文件名加;jsessionid=sessionId,其中sessionId由HttpSession.getId()得到,如http://localhost:8080/aaa/bbb.jsp;jsessionid=975FCCA6FD6058E92DDE932962A44252?...

    cookie_session知识点

    4. **路径限制**:`setPath()`方法用于设定Cookie的作用路径,例如`/catalog`,这意味着该Cookie只对指定目录及其子目录有效。 5. **安全性**:由于Cookie存储在客户端,因此其内容可能被第三方获取,不适用于存储...

Global site tag (gtag.js) - Google Analytics