Java实现一个web-terminal连接服务器(1)

前言:近期有个小实验,课程作业吧,要实现一个浏览器终端连接服务器,同时也能连接docker容器,于是开始查资料,由于自己之前也没有这方面的经验,而且好多博客讲不清反而会误导自己的思路,才想起自己写一篇博客来分享一下
注:我参考了一些博客,现在链接找不到就没去刻意搜索挂上来了
**注重思路,想着直接复制运行就......,实验课作业,漏洞很多**

服务端

这里以websocket保持状态进行前后端交互,不懂的可以自行百度了解一下它和普通http协议的区别。

1、导入Maven依赖

		<!-- Web相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- jsch支持 -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
        <!-- WebSocket 支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>2.27</version>
        </dependency>
        <dependency>
            <groupId>com.spotify</groupId>
            <artifactId>docker-client</artifactId>
            <version>8.16.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

2、配置config

配置拦截器和处理器
由于SocketHandler 处理器当中的处理逻辑交给spring容器管理,这里采用注入的方式引入,通过new引入会找不到对象报错
IP:Port/stomp/websocketJS 时前端发送请求建立 Webscoket 连接的地址(是啥为所谓,后面对应上了就行)

@Configuration
@EnableWebSocket
public class WebSshConfig implements WebSocketConfigurer {
   

    @Autowired
    private SocketHandler socketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
   
        registry.addHandler(socketHandler, "/stomp/websocketJS")
                .addInterceptors(new WebSocketHandshakeInterceptor())
                .setAllowedOriginPatterns("*")
                .withSockJS();
    }
}

3、拦截器

会存在一些跨越看不懂,因为我这是写完了代码再来写的博客,还是那句话,这东西不难,注重理解才能举一反三

public class WebSocketHandshakeInterceptor extends HttpSessionHandshakeInterceptor {
   

    private final Logger logger = LoggerFactory.getLogger(WebSocketHandshakeInterceptor.class);

    @Override
    public boolean beforeHandshake(ServerHttpRequest request,
                                   ServerHttpResponse response,
                                   WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
   
        // websocket握手建立前调用,获取httpsession
        if(request instanceof ServletServerHttpRequest) {
   
            ServletServerHttpRequest servlet = (ServletServerHttpRequest) request;

            // 这里从request中获取session,获取不到不创建,可以根据业务处理此段
            HttpSession httpSession = servlet.getServletRequest().getSession();
            logger.info
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值