栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot整合qq登录<4.使用websocket和前端建立连接>

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot整合qq登录<4.使用websocket和前端建立连接>

目录

1.前置要求和授权登录原理
2.读取自定义json配置文件信息
3.获取跳转url和回调的接口
4.使用websocket和前端建立连接
5.对接qq登录的流程

本章是写对于前端的调用
实现前端和后端的结合,利用websocket使用建立连接
完成登录的整个流程

1.后端 1.1引入websocket依赖
	
         org.springframework.boot
         spring-boot-starter-websocket
    
1.2config
@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}

1.3webController
package top.chenyp.qqService.controller;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import org.springframework.stereotype.Component;


@ServerEndpoint("/qq/{state}")
@Component
public class WsController {

    //每个客户端都会有相应的session,服务端可以发送相关消息
    private Session session;

    //接收userID
    private String state;

    //J.U.C包下线程安全的类,主要用来存放每个客户端对应的webSocket连接
    private static CopyOnWriteArraySet copyOnWriteArraySet = new CopyOnWriteArraySet();

    public String getState() {
        return state;
    }

    
    @OnOpen
    public void onOpen(Session session, @PathParam("state") String state) {
        this.session = session;
        this.state = state;
        System.out.println(this.state);
        System.out.println(this.session.getId());
        copyOnWriteArraySet.add(this);
        System.out.println("websocket有新的连接, 总数:"+ copyOnWriteArraySet.size());
    }

    
    @OnClose
    public void onClose() {
        copyOnWriteArraySet.remove(this);
        System.out.println("websocket连接断开, 总数:"+ copyOnWriteArraySet.size());
    }

    
    @OnMessage
    public void onMessage(String message) {
        System.out.println("websocket收到客户端发来的消息:"+message);
    }

    
    @OnError
    public void onError(Session session, Throwable error) {
        System.out.println("发生错误:" + error.getMessage() + "; sessionId:" + session.getId());
        error.printStackTrace();
    }

    public void sendMessage(Object object){
        //遍历客户端
        for (WsController webSocket : copyOnWriteArraySet) {
            System.out.println("websocket广播消息:" + object.toString());
            try {
                //服务器主动推送
                webSocket.session.getBasicRemote().sendObject(object) ;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    
    public void sendMessage(String message) {
        //遍历客户端
        for (WsController webSocket : copyOnWriteArraySet) {
            System.out.println("websocket广播消息:" + message);
            try {
                //服务器主动推送
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    
    public static void sendMessage(String state, String message) throws Exception {
        Session session = null;
        WsController tempWebSocket = null;
        for (WsController webSocket : copyOnWriteArraySet) {
            System.out.println(state);
            System.out.println(webSocket.getState());
            if (webSocket.getState().equals(state) ) {
                tempWebSocket = webSocket;
                session = webSocket.session;
                break;
            }
        }
        if (session != null) {
            //服务器主动推送
            tempWebSocket.session.getBasicRemote().sendText(message);
        } else {
            System.out.println("没有找到你指定ID的会话:{}"+ "; state:" + state);
        }
    }

    
    public static void sendInfo(String message) throws IOException {
        for (WsController item : copyOnWriteArraySet) {
            item.sendMessage(message);
        }
    }
}
2.前端




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027793.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号