Я пытаюсь получить доступ к атрибутам сеанса, установленным в HttpServlet
из WebSocketServlet
У меня есть два ServletContextHandler
объекта, оба с включенным SESSIONS
:
val httpHandler = object : ServletContextHandler(nullParent, contextPath, SESSIONS).apply {
addServlet(ServletHolder(httpServlet), "/*")
}
val webSocketHandler = ServletContextHandler(nullParent, contextPath, SESSIONS).apply {
addServlet(ServletHolder(wsServlet), "/*")
}
Они прикреплены как HandlerList(httpHandler, webSocketHandler)
к моей пристани Server
. Первая строка doHandle
ServletContextHandler
для HttpHandler
проверяет, является ли запрос запросом на обновление WebSocket, и немедленно возвращает его, если он есть (в этом случае он передается ServletContextHandler
для WebSocketServlet
).
У меня есть простая конечная точка POST
, которая устанавливает атрибут сеанса, но я не могу получить этот атрибут сеанса в WebSocketServlet
:
class MyWsServlet : WebSocketServlet() {
override fun configure(factory: WebSocketServletFactory) {
factory.creator = WebSocketCreator { req, res ->
// session exists here, but req.session.getAttribute("any-attr") is always null
}
}
override fun service(req: HttpServletRequest, res: HttpServletResponse) {
// session also exists here, but req.session.getAttribute("any-attr") is always null
}
}
Любой совет или предложения приветствуются.
Редактировать: я включил некоторую отладочную информацию из запроса GET против запроса WebSocket после вызова req.session.setAttribute("test", "tast")
:
Path: /
Cookies:{JSESSIONID=node01cxyhb0addjwikyb2lgtnlxlw0.node0}
Session: Session@24b04e4{id=node01cxyhb0addjwikyb2lgtnlxlw0,x=node01cxyhb0addjwikyb2lgtnlxlw0.node0,req=1,res=true}
Session id: node01cxyhb0addjwikyb2lgtnlxlw0
Session isNew: false
Session attributes: {test=tast}
---------------------------
Path: /websocket
Cookies:{JSESSIONID=node01cxyhb0addjwikyb2lgtnlxlw0.node0}
Session: Session@5989f3d1{id=node01cxyhb0addjwikyb2lgtnlxlw0,x=node01cxyhb0addjwikyb2lgtnlxlw0.node0,req=1,res=true}
Session id: node01cxyhb0addjwikyb2lgtnlxlw0
Session isNew: false
Session attributes: {}