springboot實現https訪問

略過springboot項目的建立步驟

打開命令符窗口,輸入以下命令

C:\Users\Administrator>keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

根據提示輸入


完成後在C:UsersAdministrator目錄下就會有一個keystore.p12文件java

配置application.properties

server.port=443
# 證書路徑
server.ssl.key-store=classpath:keystore.p12
# 證書祕鑰
server.ssl.key-store-password=javajava
# 證書類型
server.ssl.key-store-type=PKCS12
# 證書別名
server.ssl.key-alias=tomcat

keystore.p12是放在resources目錄下

當在application.properties中的證書路徑是這樣時git

server.ssl.key-store=keystore.p12

keystore.p12是放在項目根目錄下,注意多模塊項目,這是非多模塊項目的目錄結構,這時keystore.p12就是放在了項目根目錄

可是打成功jar包運行的時候報錯

將jar包解壓出來發現裏面根本沒有keystore.p12文件,說明沒有被打包進來,解決辦法是將keystore.p12文件放在resources目錄下,在application.properties中路徑前加上classpathspring

server.ssl.key-store=classpath:keystore.p12

或者也能夠將keystore.p12放在jar包的同級目錄下apache

可見springboot裏的classpath指的就是classes目錄,rosources目錄就是直接映射到classes目錄
編程

自動重定向http到https

在啓動類添加以下代碼瀏覽器

@Bean
    public TomcatServletWebServerFactory servletContainer() {

        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(initiateHttpConnector());
        return tomcat;
    }

    /**
     * 讓咱們的應用支持HTTP是個好想法,可是須要重定向到HTTPS,
     * 可是不能同時在application.properties中同時配置兩個connector,
     * 因此要以編程的方式配置HTTP connector,而後重定向到HTTPS connector
     * @return Connector
     */
    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80); // http端口
        connector.setSecure(false);
        connector.setRedirectPort(443); // application.properties中配置的https端口
        return connector;
    }

controller測試的代碼以下

@RestController
public class TestController {
    @GetMapping(value = "/")
    public String hello() {
        return "你好";
    }
}

瀏覽器驗證

在瀏覽器地址欄輸入localhost,回車便可看到tomcat


在地址欄輸入localhost至關於http://localhost:80,回車切換成https://localhost:443,由於80和443端口分別是http和https的默認端口,因此都隱藏了,如何同時支持http和https而端口不會變的,目前還在探索中。。springboot

碼雲代碼app

公衆號

相關文章
相關標籤/搜索