springboot配置https,并使用wss

ops/2024/11/28 11:42:00/

学习链接

springboot如何将http转https

SpringBoot配置HTTPS及开发调试

Tomcat8.5配置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

https://i-blog.csdnimg.cn/direct/b48ec701ac464f4eb48816a77e0ca82d.png" alt="在这里插入图片描述" />

将证书放到项目目录下

https://i-blog.csdnimg.cn/direct/3549c2c912674c9f924098f9aa4b84d4.png" alt="在这里插入图片描述" />

访问

访问http://192.168.134.5:8080时,会自动跳转到https://192.168.134.5:8081,由于是自签名证书,所以会有安全警告,点击继续
https://i-blog.csdnimg.cn/direct/386ea953c2d9403cb759319e5f4a7de2.png" alt="在这里插入图片描述" />
看到下方页面
https://i-blog.csdnimg.cn/direct/6d4eeb1ae4924bb0ae82f361f90c568a.png" alt="在这里插入图片描述" />
点击上面的连接ws,可以看到连接成功了
https://i-blog.csdnimg.cn/direct/d0dbd53429d747f7846eb3ee13274e05.png" alt="在这里插入图片描述" />


http://www.ppmy.cn/ops/137343.html

相关文章

模型 承诺一致原则

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。言行一致&#xff0c;承诺铸就行动。 1 承诺一致原则的应用 1.1 《得到》APP如何利用承诺一致性原则提升用户忠诚度 《得到》APP是一个知识服务平台&#xff0c;其口号“和你一起&#xff0c;终身学…

【UVM】TLM通信机制

基本概念 TLM&#xff08;transaction level modeling&#xff09;是一个基于事务&#xff08;transaction&#xff09;的通信方式&#xff0c;每次传输一个transaction&#xff0c;一个transaction就是把具有某一特定功能的一组信息封装在一起而成为的一个类。 通信对象 发起…

深度学习:GPT-2的MindSpore实践

GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比&#xff0c;仍基于Transformer Decoder架构&#xff0c;但是做出了一定改进。 模型规格上&#xff1a; GPT-1有117M参数&#xff0c;为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…

华为Mate 70系列发布,揭示AI+消费电子产业化新阶段

消费电子第三次创新浪潮正在到来。 从“‌PC电脑功能机”时代到“智能手机平板”时代&#xff0c;再到AI赋能下的新产品时代&#xff0c;消费电子硬件革新的“十二年定律”依然奏效。 在这样的背景下&#xff0c;11月26日举办的华为Mate品牌盛典向市场展示了终端硬件领域最新…

elasticsearch的文档管理

2 json数据入门 json数据类型 基础数据类型 字符串&#xff0c;只要用双引号包裹的都是字符串类型。“嘻嘻”&#xff0c;“文勇”&#xff0c;“2024” 数字型&#xff0c;2024&#xff0c;3.1415926 布尔型&#xff0c;true 和 false 空值&#xff0c;null 高级数据类…

文件的处理(c语言)

首先了解下文件的作用 文件可以把数据直接放在电脑的硬盘上&#xff0c;实现了数据的持久化 什么是文件 文件就是磁盘上的文件。在程序设计中&#xff0c;文件通常有俩种&#xff0c;一种是程序文件&#xff0c;另一种是数据文件&#xff08;这是从文件功能来分类的&#xff…

设计模式——解释器模式

定义 解释器模式是一种行为设计模式&#xff0c;它给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。在这种模式中&#xff0c;通常会将一个复杂的表达式&#xff08;如数学表达式、规则表达…

k8s删除网络组件错误

k8s集群删除calico网络组件重新部署flannel网络组件&#xff0c;再部署pod后出现报错不能分配ip地址 plugin type"calico" failed (add): error getting ClusterInformation: connection is unauthorized: Unauthorized 出现该问题是因为删除网络组件后&#xff0c;网…