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

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 {@Beanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected 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 {@Autowiredprivate WsHandler wsHandler;@Autowiredprivate WsHandshakeInterceptor wsHandshakeInterceptor;@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry// 设置处理器处理/custom/**.addHandler(wsHandler, "/wsTest/websocket")// 允许跨越.setAllowedOrigins("*")// 设置监听器.addInterceptors(wsHandshakeInterceptor);}@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}@Beanpublic ServletServerContainerFactoryBean serverContainer() {ServletServerContainerFactoryBean containerFactoryBean = new ServletServerContainerFactoryBean();containerFactoryBean.setMaxTextMessageBufferSize(2 * 1024 * 1024);return containerFactoryBean;}
}

WsHandler

@Slf4j
@Component
public class WsHandler extends TextWebSocketHandler {@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {log.info("收到客户端数据: {}", message.getPayload());session.sendMessage(new TextMessage("收到了您的消息"));}
}

WsHandshakeInterceptor

@Slf4j
@Component
public class WsHandshakeInterceptor implements HandshakeInterceptor {@Overridepublic boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {log.info("beforeHandsShake...握手前");return true;}@Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {log.info("beforeHandsShake...握手后");}}

application.yml

server:port: 8081ssl:key-store: tomcat.keystorekey-alias: tomcatenabled: truekey-store-type: JKSkey-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 = nullconst 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.mrgr.cn/news/77867.html

相关文章:

  • 链表算法速成计划
  • H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来
  • 【分享一个vue指令】鼠标放置提示指令v-tooltip
  • 【Isaac Sim】配置 Nucleus 本地服务器
  • shell编程(2)(3)
  • 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法
  • logback动态获取nacos配置
  • Spring 中的 ProxyFactory 创建代理对象
  • 学习Servlet (Servlet的实现方式1)
  • 英语写作中“联系、关联”associate correlate 及associated的用法
  • 28.UE5游戏框架,事件分发器,蓝图接口
  • 17. 指针类型和步长概念问题
  • Node相关教程
  • css效果
  • vue面试题——描述一下vue
  • Linux高阶——1123—
  • 【阵列信号处理】相干信号和非相干信号生成
  • docker基础命令
  • 【C++知识总结2】C++里面的小配角cout和cin
  • #Verilog HDL# Verilog中的generate用法集锦
  • 【线程】Java多线程编程
  • 瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇
  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • Vue实训---3-element plus的使用与布局
  • 深入解读:2023华为流程体系及落地实施
  • 【Bluedroid】A2DP SINK播放流程源码分析