2010-09-09 76 views
0

我创建了一个使用OAuthentication登录到Twitter的Web应用程序,并且登录过程在单个servlet上成功运行。在那个servlet上,我得到了用户的会话。但是,一旦我第一次移动到另一个servlet并尝试重新获取会话,就会创建一个新的会话。我认为网络应用程序会读取客户端cookie并为每个客户端创建一个会话?在下面,您可以看到客户端会话ID在整个OAuth进程中保持不变,但在新servlet上发生变化。如果cookie不起作用,我会放入encodedURLS。但是,一旦我重做OAuth进程并再次尝试一切同步...同步servlet会话

Creating Authentication Session... 
Session ID before getting Request Token: 5E5932F144E4838EFDD398407D4BA351 
Retrieving request token... 
Request token retrieved... 
Session ID after getting Request Token: 5E5932F144E4838EFDD398407D4BA351 
Swapping request token for access token... 
Session ID: F97463A1A2D239B7E6D15D1C5FDAE26B 
Sep 9, 2010 1:37:03 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet PostUpdatesServlet threw exception 
java.lang.NullPointerException 
    at com.twf.PostUpdatesServlet.doPost(PostUpdatesServlet.java:31) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:637) 

回答

1

会话依赖于域和上下文。如果两个servlet都在不同的上下文(不同的webapp)上运行,那么您需要配置servletcontainer以允许在上下文之间共享会话。在Tomcat和克隆中,您可以通过设置emptySessionPath attribtue来达到true

如果这些servlet实际上运行在相同的上下文中,那么问题就在于别的地方。根据迄今为止提供的信息很难对其进行评估。也许HttpSession#invalidate()已被调用,或者客户端发送了一个无效的jsessionid cookie请求。

+0

感谢您的快速响应。两个servlet都运行在相同的上下文中/在同一个Web应用程序中。我在一个servlet上运行OAuth并将响应传递给JSP。一旦在该JSP中有一个指向新servlet的链接,并且在该新servlet中会话ID发生变化。我敢肯定,我没有在webapp中的任何地方使用invalidate,所以我要寻找客户端cookie为什么会使ID无效或发送无效ID。 – Kirn 2010-09-09 18:29:49