springboot2.0之后,啟用https協議的方式與1.*時有點兒不同,貼一下代碼。
我的代碼能夠根據配置參數中的condition.http2https,確定是否啟用https協議,如果啟用https協議時,會將所有http協議的訪問,自動轉到https協議上。
一、啟動程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package com.wallimn.iteye.sp.asset; import org.apache.catalina.context; import org.apache.catalina.connector.connector; import org.apache.tomcat.util.descriptor.web.securitycollection; import org.apache.tomcat.util.descriptor.web.securityconstraint; import org.springframework.beans.factory.annotation.value; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.autoconfigure.condition.conditionalonproperty; import org.springframework.boot.web.embedded.tomcat.tomcatservletwebserverfactory; import org.springframework.context.annotation.bean; /** * springboot2.0啟動程序 * @author wallimn,http://wallimn.iteye.com * */ @springbootapplication public class assetapplication { public static void main(string[] args) { springapplication.run(assetapplication. class , args); } //如果沒有使用默認值80 @value ( "${http.port:80}" ) integer httpport; //正常啟用的https端口 如443 @value ( "${server.port}" ) integer httpsport; // springboot2 寫法 @bean @conditionalonproperty (name= "condition.http2https" ,havingvalue= "true" , matchifmissing= false ) public tomcatservletwebserverfactory servletcontainer() { tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory() { @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(httpconnector()); return tomcat; } @bean @conditionalonproperty (name= "condition.http2https" ,havingvalue= "true" , matchifmissing= false ) public connector httpconnector() { system.out.println( "啟用http轉https協議,http端口:" + this .httpport+ ",https端口:" + this .httpsport); connector connector = new connector( "org.apache.coyote.http11.http11nioprotocol" ); connector.setscheme( "http" ); //connector監聽的http的端口號 connector.setport(httpport); connector.setsecure( false ); //監聽到http的端口號后轉向到的https的端口號 connector.setredirectport(httpsport); return connector; }} |
二、配置文件
1.使用http協議時的配置
1
|
server.port= 80 |
2.使用https及http協議時的配置
1
2
3
4
5
6
7
|
server.port= 443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your-password server.ssl.keystoretype=pkcs12 server.ssl.keyalias=your-cert-alias condition.http2https= true http.port= 80 |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://wallimn.iteye.com/blog/2425837