2010-09-09 5 views
0

Я создал веб-приложение, которое использует OAuthentication для входа в Twitter, и процесс входа в систему успешно работает на одном сервлете. На этом сервлете я получаю сеанс для пользователя. Однако, как только я впервые перейду на другой сервлет и попытаюсь снова получить сеанс, будет создан новый. Я думал, что веб-приложение будет читать клиентские куки и создать один сеанс для каждого клиента? Ниже вы можете видеть, что идентификатор сеанса клиента остается неизменным во время процесса OAuth, но изменяется на новом сервлете. Я включил encodedURLS в случае, если файлы cookie не работают. Но как только я переделаю процесс OAuth и попробую еще раз все синхронизировать ...синхронизация сеансов сервлетов

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

Сессии являются зависимыми от домена и контекста. Если оба сервлета работают в другом контексте (другое webapp), вам необходимо настроить servletcontainer, чтобы разрешить совместное использование сеанса между контекстами. В Tomcat и клоне вы можете сделать это, установив emptySessionPath атрибут true.

Если эти сервлеты фактически работают в одном контексте, проблема лежит где-то в другом месте. Трудно прибить его, опираясь на информацию, полученную до сих пор. Возможно, был вызван HttpSession#invalidate() или клиент отправил недействительный файл cookie jsessionid с запросом.

+0

Спасибо за быстрый ответ. Оба сервлета работают в одном и том же контексте/в одном и том же веб-приложении. Я запускаю OAuth на одном сервлете и передаю ответ JSP. И однажды в этом JSP есть ссылка на новый сервлет, и в этом новом сервлете меняется идентификатор сеанса. Я уверен, что я не использовал invalidate в любом месте webapp, поэтому я собираюсь выследить, почему клиентский файл cookie либо обнуляет идентификатор, либо отправляет неверный код. – Kirn

Смежные вопросы