首页 > 其他分享 >springboot的HTTP与HTTPS

springboot的HTTP与HTTPS

时间:2022-11-17 16:22:18浏览次数:61  
标签:keystore http springboot tomcat HTTPS connector https import HTTP

1. keytool 生成证书

windows下的生成:

  keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

linux下的命令:

keytool -genkey -alias tomcat -keyalg RSA -validity 20000 -keystore keystore.p12 
 

 

 

windows下生成.png

执行完后会生成一个文件:keystore.p12

关于keytool的说明:
keytool -genkey -alias 你的证书别名 -keyalg 密钥算法 -keystore 证书库文件保存的位置和文件名 -keysize 密钥长度 -validity 证书有效期天数

springboot编码

配置application.yml

server:
  port: 8081
  ssl:
    key-store: keystore.p12
    key-store-password: test08
    key-store-type: PKCS12
    key-alias: tomcat

将上面生成的keystore.p12文件移动到classpath下。

此时你的项目就可以使用https协议访问。

与http同时访问

如果你希望你的项目既可以http访问,也可以https访问,而且两个互不干扰:
在启动类下,public class KindoApplication extends SpringBootServletInitializer(继承SpringBootServletInitializer类):

  • springboot版本1.x:
@Bean
    public EmbeddedServletContainerFactory servletContainer() {


        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {

            @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(initiateHttpConnector());

        return tomcat;
    }


    private Connector initiateHttpConnector() {
        Connector connector = new Connector(
                "org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8082);
        connector.setSecure(false);
        connector.setRedirectPort(8443);
        return connector;
    }
  • springboot版本2.x:
@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(8082);
        connector.setRedirectPort(8443);
        return connector;
    }

ps:注意:http的端口不要https相同,即上文的port设置,否则会出现端口占用错误。

http强制转换https访问

在用户用http访问的时候,强制转换为https。
基于上述模块与http同时访问,添加过滤器,强制重定向。


import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by lingbao on 2018/1/23.
 *
 * @author lingbao
 * @Description
 * @Modify
 */
@Configuration
@WebFilter
public class KindoFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String requestURL = request.getRequestURL().toString();
        String protocol = requestURL.split("://")[0];
        if ("http".equals(protocol)) {
            requestURL = requestURL.replace("http", "https").replace("8082", "8081");
            response.sendRedirect(requestURL);
        }
        filterChain.doFilter(request, response);
    }
}

方法有点蠢,如果有好的方法,欢迎留言
有BUG也可以交流交流!谢谢!

参考文献:
https://www.jianshu.com/p/68d723431596
https://www.jianshu.com/p/05c8be17c80a



作者:靈08_1024
链接:https://www.jianshu.com/p/b6549f086b21
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:keystore,http,springboot,tomcat,HTTPS,connector,https,import,HTTP
From: https://www.cnblogs.com/telwanggs/p/16899856.html

相关文章

  • [Java] HttpServletRequest
    HttpServletRequest位于javax.servlet.http,简单来说就是一个请求的封装[请求头数据+正文数据]一个域对象相关方法获取请求头方法StringgetHeader(Stringname):获取......
  • SpringBoot事件监听机制及发布订阅模式详解
    业务需求:用户注册成功之后,系统会给用户发放优惠券,发送邮件,发送短信等操作。作为开发人员,很容易写出如下代码:/***用户注册逻辑**@authorLynch*/@GetMapping(......
  • 如何选择性价比高的HTTP代理
    我们在接手爬虫业务时候,往往需要选择一款适合自己业务的HTTP代理,通常都会选择所谓性价比高的代理,可是真的是性价比越高就越适合我们的业务吗?其实不然。不少朋友,尤......
  • HTTP代理有什么用处
    1.价格、舆情等监控很多行业都存在商业竞争,例如电商平台,某一款产品如何定价就需要对比很多同行的价格,然后进行综合评估,定出最终价格,这就需要用HTTP代理去模拟不同......
  • HTTP代理哪些行业能用到
    1.价格、舆情等监控很多行业都存在商业竞争,例如电商平台,某一款产品如何定价就需要对比很多同行的价格,然后进行综合评估,定出最终价格,这就需要用HTTP代理去模拟不同......
  • 网上免费的HTTP代理靠谱吗
    很多人喜欢使用免费HTTP代理,因为它是免费的,没有成本的。但很多人在使用免费HTTP代理后来问:为什么免费HTTP代理不能用?1、免费HTTP代理资源质量很差俗话说,一分......
  • fluentd的input插件,http和forward有什么区别?
    http http插件提供一个http端点来接收http消息。 forward forward提供一个tcp端点来接收tcp包。 比如: #从24224端口接收tcp事件#用于日志转发,比如r......
  • [SpringBoot-Dubbo] 报错:NoClassDefFoundError: org/apache/curator/framework/recipe
    NoClassDefFoundError:org/apache/curator/framework/recipes/cache/NodeCacheListener缺少curator依赖<dependency><groupId>org.apache.curator</groupId><ar......
  • SpringBoot报错 java.lang.IllegalArgumentException: class org.springframework.boo
    多版本SpringBoot版本冲突java.lang.IllegalArgumentException:classorg.springframework.boot.cloud.CloudFoundryVcapEnvironment是版本问题classorg.springframe......
  • 排查http接口自动重试现象
    http接口自动重试现象的排查标题现象排查过程结论原因一是公司kong的配置:原因二:整体解释现象在公司开发时观察到一个奇怪的现象,一个运行时间较长(1分钟)的http接口会被自动......