Rumah  >  Artikel  >  Java  >  Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot

Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot

王林
王林ke hadapan
2023-05-16 12:58:11940semak imbas

1. Tambahkan kebergantungan dan konfigurasikan

untuk menggunakan pengguna dalam Spring Security.

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-security</artifactid>
</dependency>

Kami kini perlu mengkonfigurasi maklumat pengguna dan konfigurasi kebenaran.

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    // 指定密码的加密方式
    @SuppressWarnings("deprecation")
    @Bean
    PasswordEncoder passwordEncoder(){
        // 不对密码进行加密
        return NoOpPasswordEncoder.getInstance();
    }

    // 配置用户及其对应的角色
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("123").roles("ADMIN","USER")
                .and()
                .withUser("hangge").password("123").roles("USER");
    }

    // 配置 URL 访问权限
    @Override
    protected  void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests() // 开启 HttpSecurity 配置
                .anyRequest().authenticated() // 用户访问所有地址都必须登录认证后访问
                .and().formLogin().permitAll(); // 开启表单登录
    }
}

2. Tulis konfigurasi WebSocket

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 设置消息代理的前缀,如果消息的前缀为"/queue",就会将消息转发给消息代理(broker)
        // 再由消息代理广播给当前连接的客户端
        //也可设置多个 broker,如:config.enableSimpleBroker("/topic","/queue");
        config.enableSimpleBroker("/queue");
        // 下面方法可以配置一个或多个前缀,通过这些前缀过滤出需要被注解方法处理的消息。
        // 例如这里表示前缀为"/app"的destination可以通过@MessageMapping注解的方法处理
        // 而其他 destination(例如"/topic""/queue")将被直接交给 broker 处理
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 定义一个前缀为"/chart"的endpoint,并开启 sockjs 支持。
        // sockjs 可以解决浏览器对WebSocket的兼容性问题,客户端将通过这里配置的URL建立WebSocket连接
        registry.addEndpoint("/chat").withSockJS();
    }

}

3 Tulis kod kes

Tulis entiti

rreee

2. Write Controller

@Data
public class Chat {

    // 消息的目标用户
    private String to;

    // 消息的来源用户
    private String from;

    // 消息的主体内容
    private String content;

}

4. Tulis halaman

Buat halaman chat2.html dalam direktori sumber/statik sebagai sembang rakan ke rakan muka surat.

Selepas sambungan berjaya, alamat yang dilanggan ialah "/user/queue/chat", yang mempunyai lebihan awalan "/user" daripada alamat yang dikonfigurasikan pada pelayan Ini kerana awalan laluan adalah ditambahkan secara automatik ke kelas SimpMessagingTemplate .

@Controller
public class DemoController {

    @Autowired
    SimpMessagingTemplate messagingTemplate;

    // 处理来自"/app/chat"路径的消息
    @MessageMapping("/chat")
    public void chat(Principal principal, Chat chat) {
        // 获取当前登录用户的用户名
        String from = principal.getName();
        // 将用户设置给chat对象的from属性
        chat.setFrom(from);
        // 再将消息发送出去,发送的目标用户就是 chat 对象的to属性值
        messagingTemplate.convertAndSendToUser(chat.getTo(),
                "/queue/chat", chat);
    }

}

5. Hasil pengesahan

Kami menggunakan Spring Security dan ia akan melompat ke halaman log masuk lalai secara automatik.

Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot

Di sini kami mengkonfigurasi dua maklumat pengguna: admin/123, piao/123.

Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot

Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot

Atas ialah kandungan terperinci Cara menggunakan WebSocket untuk melaksanakan pemesejan titik ke titik dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam