синхронизировать сеансы сервлета - PullRequest
0 голосов
/ 09 сентября 2010

Я создал веб-приложение, которое использует OAuthentication для входа в Twitter, и процесс входа успешно работает на одном сервлете. На этом сервлете я получаю сеанс для пользователя. Однако, как только я перехожу на другой сервлет в первый раз и пытаюсь снова получить сеанс, создается новый. Я думал, что веб-приложение будет читать клиентские куки и создавать одну сессию для каждого клиента? Ниже вы можете видеть, что идентификатор сеанса клиента остается неизменным в течение всего процесса OAuth, но изменяется в новом сервлете. Я вставил кодированный ULS на случай, если куки не сработали. Но как только я повторяю процесс 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 Ответ

1 голос
/ 09 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...