Tag: jsr356

在Websocket会话中访问UserAgent?

使用Java的“JSR 356 – Java API for WebSocket”的Tyrus参考实现,我找不到一种方法来访问用于Websocket升级的HTTP连接。 因此,我无法访问浏览器发送的HTTP标头。 有没有办法读取HTTP UserAgent标头? 将“Session”对象转换为“TyrusSession”或类似对象是可以接受的,我必须这样做才能获得远程地址。 再次将UserAgent作为Websocket连接内的消息发送将是我的后备解决方案。

使用带有Spring Boot的Java API for WebSocket(JSR-356)

我是Spring的新手(并在stackoverflow上提问)。 我想通过Spring Boot启动嵌入式(Tomcat)服务器并向其注册JSR-356 WebSocket端点。 这是主要方法: @ComponentScan @EnableAutoConfiguration public class Server { public static void main(String[] args) { SpringApplication.run(Server.class, args); } } 这是配置的外观: @Configuration public class EndpointConfig { @Bean public EchoEndpoint echoEndpoint() { return new EchoEndpoint(); } @Bean public ServerEndpointExporter endpointExporter() { return new ServerEndpointExporter(); } } EchoEndpoint实现很简单: @ServerEndpoint(value = “/echo”, configurator = SpringConfigurator.class) public class […]

Java WebSockets:远程端点处于状态

我正在尝试实现一些基于websockets的应用程序,它将与JS客户端密切沟通。 发送消息的代码非常原始: synchronized (session) { if (session.isOpen()) { session.getBasicRemote().sendText(message); } } 对于罕见的发送,它工作正常,但当几个线程试图通过相同的会话(套接字)发送一些消息时,抛出下一个exception(请注意,它不是multithreading问题,因为代码块是通过会话同步的): java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1015) at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:978) at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:161) at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37) 谷歌目前并没有这种类型的例外,在这个问题上打了几个小时后,仍然没有解决方案。 Java 7.0.21,在Tomcat 7.0.52和Tomcat 8.0.3上测试。 任何答案都非常感谢! 提前致谢。 更新3/11/2014:我使用Jetty 9.1测试了我的应用程序,但没有发生此exception。 我假设这是Tomcat实现错误。

将JSR-356 WebSocket @ServerEndpoint与Spring 3 bean集成

我使用Spring 3.2.5而没有全新的JSR-356 WebSockets支持。 我想在我的@ServerEndpoint WebSocket服务器中使用singleton-bean引用,该服务器由servlet容器本身实例化,而不是在Spring上下文中实例化。 干净的方法是什么? 我目前的解决方案:我在静态字段中使用实例制作了@Service单例bean: @Service public class WebSocketSupportBean { private volatile static WebSocketSupportBean instance = null; public static WebSocketSupportBean getInstance() { return instance; } public WebSocketSupportBean() { instance = this; } 并且只是通过静态方法在@ServerEndpoint获取它,如果返回null则断开用户连接(如果在服务器启动期间bean没有创建,但是用户连接):

带有Tomcat的JSR-356 WebSockets – 如何限制单个IP地址内的连接?

我创建了一个JSR-356 @ServerEndpoint ,我想在其中限制来自单个IP地址的活动连接,以防止简单的DDOS攻击。 请注意,我正在搜索Java解决方案(JSR-356,Tomcat或Servlet 3.0规范)。 我尝试过自定义端点配置程序,但即使在HandshakeRequest对象中我也无法访问IP地址。 如何在没有像iptables这样的外部软件的情况下限制单个IP地址的JSR-356连接数?