Как настроить SessionHandler с SessionContext в Jetty? - PullRequest
0 голосов
/ 29 июня 2018

Пристань-9.4.11.v20180605

У меня есть один проект, в котором я очень рад использовать Jetty, настроив его программно (в коде Kotlin / Java, а не в файлах .xml или .ini). Я добавляю Jetty в более старый проект, и он работает хорошо, за исключением настройки SessionHandler. Похоже, он никогда не получит SessionContext, потому что он взрывается с NPE здесь:

java.lang.NullPointerException
    at org.eclipse.jetty.server.session.AbstractSessionDataStore.newSessionData(AbstractSessionDataStore.java:142)
    at org.eclipse.jetty.server.session.AbstractSessionCache.newSession(AbstractSessionCache.java:798)
    at org.eclipse.jetty.server.session.SessionHandler.newHttpSession(SessionHandler.java:794)
    at org.eclipse.jetty.server.Request.getSession(Request.java:1559)
    at org.eclipse.jetty.server.Request.getSession(Request.java:1532)

Недостаточный код конфигурации (в Kotlin) выглядит следующим образом:

val sessionIdManager = DefaultSessionIdManager(server, SecureRandom())
server.sessionIdManager = sessionIdManager

val sessionHandler = SessionHandler()
sessionHandler.sessionIdManager = sessionIdManager
sessionHandler.sessionCache =
        DefaultSessionCacheFactory().getSessionCache(sessionHandler)

val dataStoreFactory = FileSessionDataStoreFactory()
dataStoreFactory.storeDir = File(someDir)
val dataStore = dataStoreFactory.getSessionDataStore(sessionHandler)

sessionHandler.sessionCache.sessionDataStore = dataStore
server.handler = sessionHandler

Я думаю, что, возможно, мне не хватает SessionContext в AbstractSessionDataStore, который вызывается из SessionHandler.newHttpSession(), но я не знаю, как это установить. Похоже, что SessionContex связан с SessionHandler путем вызова sessionHandler.doStart(), который защищен в SessionHandler. Если это невозможно, я думаю, что я мог бы обойтись WeakHashMap вместо настоящей сессии, но я предполагаю, что лучше попытаться использовать существующую сессию.

...