【发布时间】:2020-06-30 09:04:50
【问题描述】:
我正在尝试从WebSocketServlet 访问在HttpServlet 中设置的会话属性
我有两个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。 HttpHandler 的ServletContextHandler 的doHandle 的第一行检查请求是否是WebSocket 升级请求,如果是则立即返回(在这种情况下,它会移交给ServletContextHandler 用于@987654332 @)。
我有一个简单的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
}
}
欢迎任何意见或建议。
编辑:在调用req.session.setAttribute("test", "tast") 之后,我已经包含了一些来自 GET 请求和 WebSocket 请求的调试信息:
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: {}
【问题讨论】:
标签: java kotlin servlets jetty embedded-jetty