Пристань-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 вместо настоящей сессии, но я предполагаю, что лучше попытаться использовать существующую сессию.