ant*_*tix 11
根据Tomcat开发人员@mark-thomas客户端IP 没有通过JSR-356公开,因此用纯JSR-356 API-s实现这样的功能是不可能的.
你必须使用一个相当丑陋的黑客来解决标准的限制.
需要做的事情归结为:
至少有两个hacky选项可以实现这一目标.
ServletRequestListenerrequest.getSession()传入请求以确保它具有会话并将客户端IP存储为会话属性.ServerEndpointConfig.Configurator提升客户端IP HandshakeRequest#getHttpSession并EndpointConfig使用该modifyHandshake方法将其作为用户属性附加到其中.EndpointConfig用户属性获取客户端IP ,将其存储在映射或其他任何位置,并在每个IP的会话数超过阈值时触发清理逻辑.您也可以使用@WebFilter而不是ServletRequestListener
请注意,除非您的应用程序已使用会话(例如用于身份验证),否则此选项的资源消耗较高.
/mychatServletRequest#getRequestDispatcher将请求转发给/mychat/TOKEN@ServerEndpoint("/mychat/{token}")@PathParam并解密以获取客户端IP.将其存储在地图或其他任何位置,并在每个IP的会话数超过阈值时触发清理逻辑.为了便于安装,您可能希望在应用程序启动时生成加密密钥.
请注意,即使您正在进行客户端不可见的内部调度,您也需要加密IP.没有任何东西可以阻止攻击者/mychat/2.3.4.5直接连接,从而欺骗客户端IP(如果它没有加密).
也可以看看:
| 归档时间: |
|
| 查看次数: |
9428 次 |
| 最近记录: |