当前位置: 首页 > article >正文

springboot配置https,并使用wss

学习链接

springboot如何将http转https

SpringBoot配置HTTPS及开发调试

可借鉴的参考:

  • springboot如何配置ssl支持https
  • SpringBoot配置HTTPS及开发调试的操作方法
  • springboot实现的https单向认证和双向认证(java生成证书)
  • SpringBoot配置Https访问的详细步骤
  • SpringBoot配置Https入门实践
  • springboot项目开启https协议的项目实现
  • SpringBoot的HTTPS配置实现
  • springboot配置http跳转https的过程
  • springboot支持https请求的实现
  • SpringBoot中支持Https协议的实现
  • SpringBoot整合HTTPS的项目实践

文章目录

  • 学习链接
  • 步骤
    • 搭建springboot基础项目
      • pom.xml
      • TomcatHttpsConfig
      • WebSocketConfig
      • WsHandler
      • WsHandshakeInterceptor
      • TestApplication
      • index.html
    • 生成安全证书
    • 将证书放到项目目录下
    • 访问

步骤

搭建springboot基础项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>demo-springboot-https</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>

        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>demo-springboot-https</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- maven 打包时跳过测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

TomcatHttpsConfig

@Configuration
public class TomcatHttpsConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(redirectConnector8080());
        return tomcat;
    }

    private Connector redirectConnector8080() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(8081);
        return connector;
    }


}

WebSocketConfig

@Slf4j
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private WsHandler wsHandler;

    @Autowired
    private WsHandshakeInterceptor wsHandshakeInterceptor;


    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry
                // 设置处理器处理/custom/**
                .addHandler(wsHandler, "/wsTest/websocket")
                // 允许跨越
                .setAllowedOrigins("*")
                // 设置监听器
                .addInterceptors(wsHandshakeInterceptor);
    }

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

    @Bean
    public ServletServerContainerFactoryBean serverContainer() {
        ServletServerContainerFactoryBean containerFactoryBean = new ServletServerContainerFactoryBean();
        containerFactoryBean.setMaxTextMessageBufferSize(2 * 1024 * 1024);
        return containerFactoryBean;
    }
}

WsHandler

@Slf4j
@Component
public class WsHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        log.info("收到客户端数据: {}", message.getPayload());
        session.sendMessage(new TextMessage("收到了您的消息"));
    }
}

WsHandshakeInterceptor

@Slf4j
@Component
public class WsHandshakeInterceptor implements HandshakeInterceptor {

    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
        log.info("beforeHandsShake...握手前");
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
        log.info("beforeHandsShake...握手后");
    }

}

application.yml

server:
  port: 8081
  ssl:
    key-store: tomcat.keystore
    key-alias: tomcat
    enabled: true
    key-store-type: JKS
    key-store-password: 123456

TestApplication

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

}

index.html

<html>
<head>
    <meta charset="utf8"/>
</head>
    <body>
        <h1>hello word!!!</h1>
        <p>this is a html page</p>
        <input type="text" id="ipt" value="wss://192.168.134.5:8081/wsTest/websocket" style="width: 1200px">
        <br/>
        <button type="button" id="btn">连接ws</button>
    </body>
    <script>
        var ws = null
        const btn = document.querySelector('#btn')
        btn.onclick = function(){
            console.log('halo')
            const ipt = document.querySelector('#ipt')
            console.log(ipt.value)
            ws = new WebSocket(ipt.value)
            ws.onopen = () => {
                console.log('连接成功')
            }
            ws.onmessage = (msg) => {
                console.log('收到消息: ' + msg)
            }
            ws.onerror = (err) => {
                console.log('连接失败: ' + err)
            }
        }
    </script>
</html>

生成安全证书

keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/tmp/tomcat.keystore -storepass 123456

在这里插入图片描述

将证书放到项目目录下

在这里插入图片描述

访问

访问http://192.168.134.5:8080时,会自动跳转到https://192.168.134.5:8081,由于是自签名证书,所以会有安全警告,点击继续
在这里插入图片描述
看到下方页面
在这里插入图片描述
点击上面的连接ws,可以看到连接成功了
在这里插入图片描述


http://www.kler.cn/a/407387.html

相关文章:

  • linux基本命令(1)
  • 运维面试题.云计算面试题之四.K8S
  • 2411rust,实现特征
  • 计算机网络socket编程(4)_TCP socket API 详解
  • 要素市场与收入分配
  • PH热榜 | 2024-11-22
  • manin动画编程(安装+入门)
  • 从零开始-VitePress 构建个人博客上传GitHub自动构建访问
  • go语言中的指针详解
  • 力扣第 61 题旋转链表
  • LeetCode题解:28.找出字符串中第一个匹配项的下标【Python题解超详细,滑动窗口法、内置 find 函数、KMP算法】,知识拓展, KMP算法
  • Java与Kotlin在鸿蒙中的地位
  • HAProxy面试题及参考答案(精选80道面试题)
  • 文件管理 IV(文件系统)
  • 快速入门消息队列MQ、RabbitMQ
  • 19.QT程序简单的运行脚本
  • 【最优清零方案——贪心+滑动窗口+线段树】
  • TIM输入捕获
  • 网页F12:缓存的使用(设值、取值、删除)
  • 远程控制软件使用教程
  • 使用bcc/memleak定位C/C++应用的内存泄露问题
  • uni-app打包H5自定义微信分享
  • 【eNSP】动态路由协议RIP和OSPF
  • [JLOI2014] 松鼠的新家(重链剖分+线段树)
  • Python完成达梦数据库备注到MySQL数据备注的脚本
  • 探索 .NET 9 控制台应用中的 LiteDB 异步 CRUD 操作