- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个过滤器,它会使当前 session 无效并创建新 session 并将旧 session 的属性复制到新 session 中。这在 tomcat5 和 jdk 1,4 中工作正常但是当我将它切换到 tomcat6 和 jdk 1.6 时过滤器运行后,下一个请求 httprequest.getsession(false )
为 null
。为什么它在 tomcat 6 中表现不同。请帮忙。这是代码片段
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
System.out.println("within GenerteNewSessionFilter");
System.out.println("within GenerteNewSessionFilter getRequestURI"+httpRequest.getRequestURI());
System.out.println("within GenerteNewSessionFilter getRequestURL"+httpRequest.getRequestURL());
System.out.println("within GenerteNewSessionFilter session false"+httpRequest.getSession(false));
String reqUrl=httpRequest.getRequestURL().toString();
if (reqUrl==null){
reqUrl="";
}
int idxLogin=reqUrl.indexOf("LoginSubmit.jsp");
int idxReg=reqUrl.indexOf("RegistrationSubmit.jsp");
int idxErr=reqUrl.indexOf("Error");
int idxSave=-1;
System.out.println("within GenerteNewSessionFilter reqUrl "+reqUrl);
System.out.println("within GenerteNewSessionFilter idxLogin index"+idxLogin);
System.out.println("within GenerteNewSessionFilter idxReg index"+idxReg);
System.out.println("within GenerteNewSessionFilter idxErr index"+idxErr);
if (httpRequest.getSession(false) != null && (idxLogin >0 || idxReg >0) && idxErr <0 ){
//copy session attributes from old session to a map.
System.out.println("copy session attributes from old session to a map");
HttpSession session = httpRequest.getSession();
HashMap old=new HashMap();
Enumeration keys = (Enumeration) session.getAttributeNames();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
old.put(key, session.getAttribute(key));
session.removeAttribute(key);
}
System.out.println("old session id "+session.getId());
//invalidate session and create new session.
session.invalidate();
//create new session
session = httpRequest.getSession(true);
//copy session attributes from map session to new session
Iterator it = old.entrySet().iterator(); //iterator
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
//putitng old attributes in to new session
session.setAttribute((String) pairs.getKey(), pairs.getValue());
}//end while loop
System.out.println("end copy session attributes");
System.out.println("new session id status "+httpRequest.getSession(false));
System.out.println("final new session session id "+session.getId());
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
最佳答案
HttpServletRequest.getSession(boolean create) 的 javadoc明确指出,如果您将 false
值传递给它的参数,它只会返回 HttpSession
(如果已经存在)。如果没有与请求关联的 session ,它将返回 null
。
因此,如果您使当前 session 无效,显然在您的下一个请求中调用 request.getSession(false)
将返回 null
。
如果您想在使当前 session 无效后创建一个新 session ,请使用:request.getSession(true)
或更简单:request.getSession()
。
关于java - httprequest.getsession 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664811/
有什么区别 request.getSession() 和 getThreadLocalRequest().getSession() 我正在维护的应用程序似乎将第一个用于直接 Servlet,将第二个用
我了解 request.getSession(true) 和 request.getSession(false) 之间的区别。但是 request.getSession() 和 request.get
就 session 而言,这些调用实际上意味着什么? System.out.println("print1: "+request.getSession().getId()); System.out.p
在过滤器中,我使用request.getSession(false)来获取 session ,这没关系。但是当我对其进行单元测试时,request.getSession(false)将返回null o
我们通过实现 Filter 在我们的应用程序中拥有 SecurityFilter 类,我们的 doFilter 方法如下所示。 public void doFilter(ServletRequest
我有一个 servlet LogMeOut.java,我在其中编写以下代码: HttpSession session = request.getSession(false); if (session
非常简单的问题,request.getSession(true) 返回 null,就好像拒绝创建 session 一样。我已经重新启动了我的机器并为 Tomcat 和 IntelliJ 添加了内存。任
我创建了一个登录 servlet: @WebServlet( name = "SignInServlet", description = "check email & pass",
在某些设备上我遇到以下崩溃: //崩溃信息 SIGABRT 00 pc 00041300 /system/lib/libc.so (tgkill+12) [armeabi-v7a::1b3176677
我理解如果我们使用下面的语句 HttpSession session = request.getSession(); 将创建唯一 session ID,创建 Cookie 并将 Cookie 与 se
是否可以找到Android OpenSSLSocketImpl 关闭Socket 的原因? (如何调试 Android 内部库?) 背景:可以找到我尝试创建 SSLContext 的来源 in TLS
本文整理了Java中org.directwebremoting.WebContext.getSession()方法的一些代码示例,展示了WebContext.getSession()的具体用法。这些代
sessionCreated()中的HttpSessionListener方法是否自动与request.getSession()调用同步?特别是,我想知道在sessionCreated()方法中设置
我试图在Grails 2.3.5的TagLib中使用以下代码。 class LoginTagLib { def loginControl = { if(request.getSession(
使用 Spring 的 SessionFactoryUtils for Hibernate,getSession() 和 getNewSession() 之间的实际区别是什么? 我一直在 DAO 方法
由于对 Spring 方法的理解不当,我遇到了一个问题 -> GetHibernateTemplate/GetSession。当我使用 native sql 查询 [getSession().crea
我编写了一个过滤器,它会使当前 session 无效并创建新 session 并将旧 session 的属性复制到新 session 中。这在 tomcat5 和 jdk 1,4 中工作正常但是当我将
我正在测试以下方法: public static String createSn(HttpServletRequest request, String usrnm) { HttpSession
我脑子里有以下代码 jQuery(document).ready(function() { var pic = 0; FB.init({appId: '135570939849404'
我有一个问题。在 glassfish 的 servlet 中,我调用方法 request.getSession(false)。它应该返回 null。但是总是返回一个 session。此外,如果我在调用
我是一名优秀的程序员,十分优秀!