SpringBoot配置https(SSL证书)

这篇具有很好参考价值的文章主要介绍了SpringBoot配置https(SSL证书)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一步:
首先得明白什么是wss协议:

可以看这篇文章:WSS、SSL 和 https 之间的关系

第二步:
先拿到ssl证书:我这边是用的阿里云的免费证书具体获取方法如下:

先登录阿里云官网找到SSL证书选项,然后申请免费证书,然后下载tomcat证书。

可以参考:阿里云申请免费 SSL证书 https 的图文教程_林中明月间丶-CSDN博客_阿里云申请免费ssl证书
SpringBoot配置https(SSL证书)
将下载的证书压缩包解压,找到后缀为.pfx的证书文件导入我们的springboot项目,如图:
SpringBoot配置https(SSL证书)

然后在springboot的配置文件里面配置相应的属性(证书密码在解压后的pfx-password.txt文件中可以查看),我这边是配置了两个端口http和https都能访问该项目,同理ws和wss协议也都是支持的。

server.ssl.key-store=classpath:证书名称.pfx
# 密码
server.ssl.key-store-password=证书密码
# 秘钥证书库类型
server.ssl.keyStoreType=PKCS12
#这里先放一个参数,一会儿再程序中直接@Value获取
myhttp.port=9097
# 此端口为HTTPS端口
server.port=9095
在这里插入代码片

添加依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
import com.wanma.display.center.ds.DynamicDataSourceRegister;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.websocket.server.WsSci;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@Import(DynamicDataSourceRegister.class)
@EnableScheduling
public class DisplayCenterApplication {

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

    @Value("${myhttp.port}")
    private Integer httpPort;


    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
        return tomcat;
    }

    private Connector createHTTPConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(httpPort);
        return connector;
    }

    /**
     * 创建wss协议接口
     *
     * @return
     */
    @Bean
    public TomcatContextCustomizer tomcatContextCustomizer() {
        System.out.println("websocket init");
        return new TomcatContextCustomizer() {
            @Override
            public void customize(Context context) {
                System.out.println("init   customize");
                context.addServletContainerInitializer(new WsSci(), null);
            }
        };
    }
}

添加WebSocketConfig 配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig  {

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

然后在启动项目。

到这里所有的配置都已经结束了,接下来就是测试了。

websocket 代码:文章来源地址https://www.toymoban.com/news/detail-506207.html


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


@ServerEndpoint("/ws/{token}") // 指定建立连接使用的URI
@Component
public class WebSocketServer {

    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    /**
     * 用于存储Session的Map,key为连接标识
     */
    public static final Map<String, Session> SESSION_MAP = new ConcurrentHashMap<>();

    /**
     * 连接建立
     * 从请求的URL:ws://localhost:8091/ws/{token}参数里面获取标识token
     */
    @OnOpen
    public void onOpen(@PathParam("token") String token, Session session){
        LOGGER.info("长连接已建立,用户:" + token);
        System.out.println("长连接已建立,用户:" + token);
        // 存储连接session,在需要用的地方直接使用
        SESSION_MAP.put(token,session);
    }

//    /**
//     * 收消息
//     */
//    @OnMessage
//    public void onMessage(){
//    }


    /**
     * 连接断开
     * @param token
     * @param session
     */
    @OnClose
    public void onClose(@PathParam("token") String token, Session session){
        LOGGER.info("长连接已断开,用户:" + token);
        System.out.println("长连接已断开,用户:" + token);
        SESSION_MAP.remove(token);
    }

    /**
     * 长连接出现异常
     */
    @OnError
    public void onError(Throwable throwable){
        LOGGER.info("长连接出现异常:" + throwable.getMessage());
        System.out.println("长连接出现异常:" + throwable.getMessage());
    }



}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>websocket通讯</title>
</head>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
    var socket;
 
    function openSocket() {
        if (typeof (WebSocket) == "undefined") {
            console.log("您的浏览器不支持WebSocket");
        } else {
            console.log("您的浏览器支持WebSocket");
            //实现化WebSocket对象,指定要连接的服务器地址与端口  建立连接
            //等同于socket = new WebSocket("ws://localhost:8888/xxxx/im/25");
            //var socketUrl="${request.contextPath}/im/"+$("#userId").val();
            //var socketUrl="http://app.boruisijj.com:9099/demo/imserver/"+$("#userId").val();
            var socketUrl = "https://localhost:9093/websocket/" + $("#userId").val();
            socketUrl = socketUrl.replace("https", "wss").replace("http", "ws");
            console.log(socketUrl);
            if (socket != null) {
                socket.close();
                socket = null;
            }
            socket = new WebSocket(socketUrl);
            //打开事件
            socket.onopen = function () {
                console.log("websocket已打开");
                //socket.send("这是来自客户端的消息" + location.href + new Date());
            };
            //获得消息事件
            socket.onmessage = function (msg) {
                console.log(msg.data);
                //发现消息进入    开始处理前端触发逻辑
            };
            //关闭事件
            socket.onclose = function () {
                console.log("websocket已关闭");
            };
            //发生了错误事件
            socket.onerror = function () {
                console.log("websocket发生了错误");
            }
        }
    }
 
    function sendMessage() {
        if (typeof (WebSocket) == "undefined") {
            console.log("您的浏览器不支持WebSocket");
        } else {
            console.log("您的浏览器支持WebSocket");
            console.log($("#contentText").val());
            socket.send($("#contentText").val());
        }
    }
</script>
<body>
<p>【userId】:
<div><input id="userId" name="userId" type="text" value="10"></div>
<p>【toUserId】:
<div><input id="toUserId" name="toUserId" type="text" value="20"></div>
<p>【toUserId】:
<div><input id="contentText" name="contentText" type="text" value="hello websocket"></div>
<p>【操作】:
<div><a οnclick="openSocket()">开启socket</a></div>
<p>【操作】:
<div><a οnclick="sendMessage()">发送消息</a></div>
</body>
 
</html>

到了这里,关于SpringBoot配置https(SSL证书)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot添加SSL证书,支持https与http

    将证书文件放在/resource目录下 修改配置文件

    2024年02月10日
    浏览(43)
  • tomcat ssl证书 https配置

    先记得配置安全组 443 阿里云SSL控制台下载SSL证书并解压 把解压的文件放入远程服务器Tomcat目录下的conf目录 进入Tomcat conf目录配置server.xml文件,需要修改两个地方 一个 端口号 一个 证书的路径和密码 http自动重定向到https 修改web.xml, 放到最后 然后重启tomcat

    2024年01月18日
    浏览(56)
  • 配置https---Nginx认证ssl证书

    nginx作为前端的负载均衡服务器已经很熟悉了,项目需要使用https安全的时候就需要认证证书了 dockerweb管理工具 Portainer 如果对docker不那么熟悉可以使用docker 第三方管理端 然后访问本地9000端口,登录后可以管理容器镜像 有了该工具可以直接进入容器查看日志等操作 nginx环境安装

    2024年01月19日
    浏览(53)
  • nginx配置ssl证书使用https访问

    一:申请证书,我使用的是阿里云免费证书 二:下载证书,解压到服务器上 两个文件:www.xx.com.pem和www.xx.com.key 三:打开配置文件/usr/local/nginx/conf/nginx.conf 放开端口443,替换ssl_certificate和ssl_certificate_key为自己证书路径    server {         listen       443 ssl;         server_na

    2024年01月20日
    浏览(60)
  • Apache配置ssl证书-实现https访问

    443为HTTPS服务的默认端口 启用SSL功能,安装mod_ssl.so模块 使用Certbot签发和续费泛域名SSL证书:https://blog.csdn.net/cljdsc/article/details/133461361 vhost的域名配置文件.conf,在目录:/etc/httpd/conf.d HTTP配置: HTTPS配置: HTTP HTTPS 配置 查看配置文件是否正常 重启apache配置

    2024年02月03日
    浏览(53)
  • 【阿里云】申请与配置域名与配置Https(ssl)证书

    网站标识:域名可以唯一地标识一个网站或在线服务,类似于网站的身份证。通过输入域名,用户可以方便地找到并访问特定的网站 简化网址:域名代替了复杂的 IP 地址(如:192.168.0.1),使用户更容易记忆和输入网站地址。例如,www.example.com 代表了一个网站,而不需要记

    2024年02月02日
    浏览(47)
  • Nginx配置ssl证书实现https安全访问

    目录 一、Nginx的安装与配置 安装步骤 二、SSL证书获取 三、Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名。 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能:  显示如上,则代表ssl功能已开启,否则可能出现以下错误提示: nginx: [emer

    2024年02月15日
    浏览(40)
  • Tomcat配置https,JAVA生成ssl证书,http和https双向配置

    1、java生成ssl证书 首先要确认环境是否安装JDK;必须安装JDK才能生成SSL证书 1.1、服务器生成证书 服务器生成证书: 使用keytool为Tomcat生成证书,假定目标机器的域名是“127.0.0.1”,keystore文件存放在“D:omcat.keystore”,口令为“123456”,validity为证书有效时间当前为90天  生成命

    2024年02月01日
    浏览(39)
  • 配置SSL证书后,Nginx的HTTPS 不能正常

    申请ssl证书,配置nginx支持https与证书,可是访问https的nginx总是出现错误,也导致小程序发https请求失败,这是什么原因呢? 如果在配置SSL证书后,Nginx的HTTPS无法正常工作,可能有以下几个常见原因: 1、证书配置错误: 证书文件路径出现错误或不存在;文件格式错误;证书

    2024年02月03日
    浏览(49)
  • Tomcat配置ssl证书(jks类型)实现HTTPS

    certificateKeystoreFile:证书地址,可使用绝对路径,也可以配置相对路径 certificateKeyAlias:生成证书时输入的别名(选填) certificateKeystorePassword:生成证书时输入的密钥,如果没有空着  

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包