首页 > 编程语言 >使用Spring WebSocket实现实时Java应用

使用Spring WebSocket实现实时Java应用

时间:2024-07-29 17:19:59浏览次数:13  
标签:web WebSocket socket Spring springframework Java import org

使用Spring WebSocket实现实时Java应用

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们来探讨一下如何使用Spring WebSocket实现实时Java应用。WebSocket是一种在客户端和服务器之间建立长连接的协议,适用于需要实时数据更新的场景。Spring提供了对WebSocket的良好支持,使得开发实时应用变得更加简单。

WebSocket简介

WebSocket是HTML5的一部分,旨在通过单个TCP连接提供全双工、低延迟的通信。相比于传统的HTTP请求-响应模式,WebSocket在建立连接后,客户端和服务器可以相互发送数据,而无需再建立新的连接。

Spring WebSocket的基本配置

首先,我们需要在Spring Boot项目中添加WebSocket的依赖。在pom.xml中添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
</dependencies>

创建WebSocket配置类

接下来,我们创建一个配置类来配置WebSocket:

package cn.juwatech.websocket.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import cn.juwatech.websocket.handler.MyWebSocketHandler;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/ws").setAllowedOrigins("*");
    }
}

创建WebSocket处理器

WebSocket处理器用于处理WebSocket连接的各个生命周期事件,如连接建立、消息接收、连接关闭等。我们创建一个简单的处理器:

package cn.juwatech.websocket.handler;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Connection established: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Hello, " + message.getPayload() + "!"));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("Connection closed: " + session.getId());
    }
}

创建WebSocket客户端

为了测试我们的WebSocket服务器,我们还需要创建一个简单的WebSocket客户端:

package cn.juwatech.websocket.client;

import java.net.URI;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHttpHeaders;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.sockjs.client.SockJsClient;
import org.springframework.web.socket.sockjs.client.Transport;
import org.springframework.web.socket.sockjs.client.WebSocketTransport;

import java.util.Collections;
import java.util.List;

public class MyWebSocketClient {

    public static void main(String[] args) {
        List<Transport> transports = Collections.singletonList(new WebSocketTransport(new StandardWebSocketClient()));
        SockJsClient sockJsClient = new SockJsClient(transports);
        WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
        sockJsClient.doHandshake(new MyClientHandler(), headers, URI.create("ws://localhost:8080/ws"));
    }

    private static class MyClientHandler extends TextWebSocketHandler {
        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            System.out.println("Client connection established");
            session.sendMessage(new TextMessage("World"));
        }

        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            System.out.println("Received message: " + message.getPayload());
        }
    }
}

集成Spring Security

为了提高安全性,我们可以将Spring Security集成到我们的WebSocket应用中。首先,在pom.xml中添加Spring Security的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

然后,配置Spring Security以保护WebSocket端点:

package cn.juwatech.websocket.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/ws/**").authenticated()
                .and()
            .formLogin()
                .and()
            .csrf().disable()
            .addFilterBefore(new WebSocketAuthFilter(), UsernamePasswordAuthenticationFilter.class);
    }

    @Bean
    public WebSocketAuthFilter webSocketAuthFilter() {
        return new WebSocketAuthFilter();
    }
}

在上述配置中,我们定义了一个WebSocketAuthFilter来处理WebSocket的认证逻辑。

总结

通过Spring WebSocket,我们可以轻松地在Java应用中实现实时通信。通过配置WebSocket处理器和客户端,我们可以在客户端和服务器之间建立实时的数据传输通道。通过集成Spring Security,我们还可以增强应用的安全性。本文的示例展示了基本的配置和使用方法,希望能够为你的实时应用开发提供帮助。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:web,WebSocket,socket,Spring,springframework,Java,import,org
From: https://www.cnblogs.com/szk123456/p/18330543

相关文章

  • Java中的应用监控与日志分析:ELK Stack
    Java中的应用监控与日志分析:ELKStack大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论如何使用ELKStack(Elasticsearch,Logstash,Kibana)进行Java应用的监控与日志分析。ELKStack是目前非常流行的一种解决方案,能够帮助开发者轻松地收集、......
  • Java中的反序列化漏洞及其防护措施
    Java中的反序列化漏洞及其防护措施大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨Java中的反序列化漏洞及其防护措施。反序列化漏洞是由不安全的对象反序列化引起的,攻击者可以通过精心构造的恶意数据流进行攻击,导致远程代码执行和其他安全......
  • 使用Spring Cloud Stream处理Java消息流
    使用SpringCloudStream处理Java消息流大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何使用SpringCloudStream来处理Java消息流。SpringCloudStream是一个用于构建消息驱动微服务的框架,能够与各种消息中间件集成,如RabbitMQ、Kafka......
  • Java中的AOP技术:AspectJ与Spring AOP
    Java中的AOP技术:AspectJ与SpringAOP大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨Java中的AOP(面向切面编程)技术,主要聚焦于AspectJ和SpringAOP。这两者是Java领域中实现AOP的主要工具,通过它们可以实现代码的横切关注点(如日志记录、安全检......
  • 使用JUnit 5进行Java单元测试的高级技术
    使用JUnit5进行Java单元测试的高级技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何使用JUnit5进行Java单元测试的高级技术。JUnit5是Java测试框架JUnit的最新版本,它引入了许多新功能和改进,使得编写和执行测试更加方便和灵活......
  • Java 启动参数最全详解
    Java启动参数最全详解!在Java开发中,发布JAR文件是一个常见的操作。合理设置启动参数可以确保应用程序在不同环境中正常运行,并优化性能。本文将详细介绍所有可能的启动参数,以及它们的使用场景、设置建议和具体示例。一、JAR文件基础JAR(JavaArchive)文件用于打包Java......
  • 配置spring boot所有启动类都在同一个窗口
    1)添加服务窗口在idea下面结果如下:2)配置前3)选择运行配置类型4)选择SpringBoot配置5)SpringBoot启动类配置成功6)配置前端启动窗口也可以在这里配置查看运行,配置......
  • SSM整合Web工程报错Unable to locate Spring NamespaceHandler for XML schema namesp
    博主在启动Tomcat后报错这个 org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configurationproblem:UnabletolocateSpringNamespaceHandlerforXMLschemanamespace[http://www.springframework.org/schema/tx]Offendingresource:cl......
  • springboot+vue基于web点餐小程序的个性化推荐演示录像【程序+论文+开题】-计算机毕业
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,餐饮业正经历着前所未有的变革。传统餐饮模式逐渐向智能化、数字化转型,其中,基于Web的点餐小程序凭借其便捷性、高效性和广泛的用户覆盖,成为了餐饮行业的重要服务形式。然而,在海量美食信息与多样化消费者需求......
  • springboot+vue基于web的中草药信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着中医药在全球范围内的日益普及与认可,中草药作为中医药体系的核心组成部分,其信息的系统化、标准化管理显得尤为重要。然而,当前市场上缺乏一个全面、便捷且基于Web的中草药信息管理系统,导致中草药信息零散、不易获取,既不利于中医药......