美文网首页
2018-12-20 Springboot2.x 中配置http

2018-12-20 Springboot2.x 中配置http

作者: 爆米花_29df | 来源:发表于2018-12-20 10:32 被阅读0次

    1、生成证书

    如果大家对HTTPS不太了解可自行检索资料,这里就不在赘述HTTPS.

    我们要想使用https协议,我们需要生成一个证书,这个证书我们可以自己生成,也可以从SSL证书中心获取(阿里云)自己生成的不被客户端认可,从授权中心获取的证书客户端才认可。有money的富豪可以去服务商哪里去获取(笔者是个穷鬼)我们这里使用的是自行生成的证书。

    自己生成证书的方式很简单,直接使用java自带的keytool来生成,生成的命令如下:

    keytool -genkeypair -alias "test1" -keyalg "RSA" -keysize 2048 -keystore " E:\tomcat.key"  -validity 3650

    这里涉及到几个参数的含义我简单说一下:

    1.-genkeypair 生成一对非对称密钥;

    2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法 

    3.-keysize 证书大小 

    4.-keystore 生成的证书文件的存储路径 

    5.-validity 证书的有效期

    执行完成后上面的命令后,就会在相对应的路径下生成对应的文件。获取到文件怎么使用进Spring boot项目呢?

    2、Spring boot 2.x 配置SSL 使用 https

        2.1 首先,将刚刚获取的证书,放在心目的根目录下

        2.2 配置 application.yml 文件

    3、也上步骤就将https配置完成。但是这样还不够,因为用户并不知道是否使用HTTPS ,大多数的用户是直接使用HTTP协议来访问我们的网站的。这时候我们需要添加HTTP自定转项到HTTPS的功能,当用户使用HTTP来进行访问的时候自动转为HTTPS的方式。这个配置很简单,在入口类中添加相应的转向Bean就行了。

        在springboot1.x这样配置

        @Bean

    public Connector connector(){

            Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");

            connector.setScheme("http");

            connector.setPort(8080);

            connector.setSecure(false);

            connector.setRedirectPort(1111);

            return connector;

    }

    @Bean

     public EmbeddedServletContainerFactory servletContainer() {

     TomcatEmbeddedServletContainerFactory tomca t= new     TomcatEmbeddedServletContainerFactory() {

                @Override           

                    protected void postProcessContext(Context context) {

                    SecurityConstraint constraint = new SecurityConstraint();

                    constraint.setUserConstraint("CONFIDENTIAL");

                    SecurityCollection collection = new SecurityCollection();

                    collection.addPattern("/*");

                    constraint.addCollection(collection);

                    context.addConstraint(constraint);

                }

            };

            tomcat.addAdditionalTomcatConnectors( connector ());

            return tomcat;

        }

    这个时候当我们访问http://localhost:8080的时候系统会自动重定向到https://localhost:1111这个地址上。

           首先 这里需要使用 EmbeddedServletContainerFactory 这个类,但是在springboot2.x版本已经找不到这个类了。但是在网上大部分还都是根据1.x来实现的,这也是我为什么写这篇文章的初衷,所以需要下边代码实现springboot2.x版本HTTP自动转向HTTPS。

    在springboot2.x这样配置

    @Bean

    public Connector connector(){

    Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");

    connector.setScheme("http");

    connector.setPort(8080);

    connector.setSecure(false);

    connector.setRedirectPort(8033);

    return connector;

    }

    @Bean

    public TomcatServletWebServerFactory tomcatServletWebServerFactory(){

    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(connector());

    return tomcat;

    }

    到这,我们在springboot2.x项目中,当我们访问http://localhost:8080的时候系统会自动重定向到https://localhost:1111这个地址上。

    区别就是EmbeddedServletContainerFactory 换成了TomcatServletWebServerFactory;

    相关文章

      网友评论

          本文标题:2018-12-20 Springboot2.x 中配置http

          本文链接:https://www.haomeiwen.com/subject/sliekqtx.html