用户首次登陆系统时,会在地址后面加个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`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来阐述如何在实际应用中处理这些问题。 首先,`jsessionid`是Java Servlet容器为了跟踪用户...
然而,这种处理办法治标不治本,当用户第一次访问的时候,Cookie 还是会记录原 Path 属性,之后的再次访问,属性会被容器置换。 2. 从容器本身解决 从容器本身解决的思路是通过配置容器的设置来处理问题。例如,...
在探讨“IFrame中Session丢失的解决办法”这一主题时,我们首先需要理解Session与IFrame的基本概念及其在Web开发中的交互方式。Session是Web应用中用于存储用户特定信息的一种机制,它允许开发者在用户的会话期间...
**三、解决办法** 1. **设置不同的Cookie名称**:在每个应用的Weblogic.xml配置文件中,可以通过设置`<session-descriptor>`标签内的`cookie-name`属性,为每个应用分配独特的Cookie名称,避免名称冲突。 2. **...
一个服务器上搭建了多个tomcat或者weblogic,...这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。
jsessionid=" + sid); %> ``` 这种方式虽然避免了IE的Cookie限制,但可能引入新的安全风险,因为Session ID将暴露在URL中,容易被恶意用户截获。因此,在实施前需评估安全性和性能影响。 ### 结论 IE浏览器特有...
java中Servlet Cookie取不到值原因解决办法 java中Servlet Cookie取不到值原因解决办法是指在使用Java Servlet时,无法获取Cookie值的问题。这种情况通常发生在使用request.getCookies()方法时,却无法获取到Cookie...
在使用jQuery的插件uploadify时,开发者们可能会遇到在Firefox(FF)浏览器下插件无法正常工作的...通过本文所介绍的在URL中附加jsessionid参数的方法,往往能够解决大多数情况下uploadify在Firefox中不工作的问题。
解决办法同样是确保正确设置Cookie策略,使得Session能够在不同的页面间正确传递。 总的来说,针对IE浏览器中iframe跨域导致Session丢失的问题,关键在于理解浏览器对跨域Cookie的处理方式,特别是IE的独特限制。...
但这种方法只是临时解决了表面现象,没有从根本上解决问题。因为每次用户访问都需要重新验证身份,可能会增加服务器负载。 ```javascript // 删除cookie中的JSESSIONID document.cookie = "JSESSIONID=0;path=/;...
本文将详细探讨一个特定的问题,即“uploadify在Firefox下丢失session问题的解决方法”,这是一个常见的前端上传插件与后端session管理不兼容的问题,特别是在使用JSP和Firefox浏览器时。 首先,了解session的基本...
**解决方法** 1. **手动设置Cookie**:在发起HTTP请求时,需要在HttpURLConnection的请求头中添加已有的Session ID。可以使用`HttpURLConnection.setRequestProperty("Cookie", "JSESSIONID=value")`来设置Cookie。...
第二种方法(注释部分)则是将一个`BuyCart`对象(可能是封装了购物车数据的类)存储在会话中,并设置名为"JSESSIONID"的Cookie,这通常是服务器默认设置的会话跟踪Cookie。这种方法与第一种类似,只是将恢复的数据...
// 解析cookieHeader,例如:JSESSIONID=123456; Path=/; HttpOnly // 使用CookieManager的CookiePolicy接受所有Cookie cookieManager.getCookieStore().add(null, parseCookie(cookieHeader)); } ``` 4. 共享...
- **其他环境下的实现**:对于使用其他服务器端技术(如ASP.NET等)的应用程序,也可以考虑类似的方法来解决会话管理问题。尽管原文提到没有找到具体的解决方案,但思路是相似的,即通过URL参数的形式传递会话标识...
然而,这种方法无法处理服务器宕机后的会话转移问题,可能导致用户 session 失效。 **解决方案探讨** 1. **ip_hash**:通过将每个 IP 地址的请求映射到固定的后端服务器,实现会话粘性。但是,ip_hash 不适用于以下...
所以解决方案如下: 方法一:url中紧跟servlet/jsp文件名加;jsessionid=sessionId,其中sessionId由HttpSession.getId()得到,如http://localhost:8080/aaa/bbb.jsp;jsessionid=975FCCA6FD6058E92DDE932962A44252?...
4. **路径限制**:`setPath()`方法用于设定Cookie的作用路径,例如`/catalog`,这意味着该Cookie只对指定目录及其子目录有效。 5. **安全性**:由于Cookie存储在客户端,因此其内容可能被第三方获取,不适用于存储...