springboot-learn-03
30585 ワード
SpringbootにHTTPS機能を追加
HTTPS:ハイパーテキスト転送セキュリティプロトコル(HyperText Transfer Protocol Secure)、略称:HTTPS;HTTP over TLS、HTTP over SSLまたはHTTP Secureと呼ばれることが多い)は、コンピュータネットワークを介して安全な通信を行う伝送プロトコルである.HTTPSはHTTP経由で通信するが、SSL/TLSでパケットを暗号化する.HTTPS開発の主な目的は,ウェブサイトサーバに対するアイデンティティ認証を提供し,交換データのプライバシーと完全性を保護することである.このプロトコルは、ネットビュー(Netscape)が1994年に初めて提案し、インターネットに拡張された.HTTPSデジタル証明書を生成Javaが持参したJDK管理ツールkeytoolを利用して無料のhttps証明書を生成する.%JAVVAへHOME%binディレクトリの下で、次のコマンドを実行してデジタル証明書を生成します:
HTTPSを導入し、上記で生成した の構成が追加されています.
プロジェクトを開始し、直接Httpプロトコルを使用してインタフェースにアクセスすると、httpsに変更してアクセスすると、結果は以下の通りです:「安全ではありません」:これは私たちが生成したhttps証明書がブラウザに認められないためですが、大丈夫です.私たちは直接クリックしてアクセスを続けることができます(実際のプロジェクトではブラウザで承認されたhttps証明書を交換するだけでいいです).要求転送Spring BootはHTTPとHTTPSの同時起動をサポートしていないことを考慮し、この問題を解決するために、ここでは要求転送を構成することができ、ユーザーがHTTP呼び出しを開始すると、自動的にHTTPSに転送する. 新規構成クラスTomcatConfig
ここでは、Httpの要求ポートを8081として構成し、8081からのすべての要求は、8080というhttpsのポートに自動的にリダイレクトされる.
その後、httpリクエストにアクセスすると、自動的にhttpにリダイレクトされます.テスト:
HTTPSへの移行に成功した.
Springbootのスターを手動で生成
私たちはSpring Bootを使っていますが、基本的にはStaterの便利さに酔っています.Starterは私たちに多くの自動化配置をもたらしてくれました.これらの自動化配置があれば、私たちは灰を吹くことなく生産レベルの開発環境を構築することができます.一部のパートナーはこのStarterが不思議だと思っています.実はスターもSpring+SpringMVCの基礎知識点で実現されています.実はStarterの核心は条件注記@Conditionalで、classpathの下にあるClassが存在すると、ある構成が有効になります.カスタムStarterいわゆるStarterは、実は普通のMavenプロジェクトです.そのため、カスタムStarterは、まず普通のMavenプロジェクトを作成する必要があります.作成が完了したら、
構成が完了すると、まずアプリケーションを受け入れるHelloPropertiesクラスを作成します.propertiesに注入された値は、次のとおりです.
エラーを報告し、Componentを加えて解決する.解決Configuration Annotation Proessor not found in classpathは以下の通りである.spring boot Configuration Annotation Proessor not found in classpathの提示は@ConfigurationPropertiesという注釈を用いる場合であるため、問題は2.ConfigurationProperties注記. プロンプトのnot found in classpathに基づいて、この注釈の使用を問い合わせるclasspathの指定方法について、さらにlocation,spring boot 1を問い合わせる.5以上のバージョン@ConfigurationPropertiesはlocation注記をキャンセルします.
公式ソリューション、Maven導入依存:
HelloPropertiesクラスに戻ります.この構成クラスはよく理解しています.アプリケーションを使用します.propertiesで構成された属性値はこの例に直接注入され、@ConfigurationPropertiesタイプの安全な属性注入がアプリケーションされる.propertiesファイルの接頭辞
次は私たちの重軸劇で、自動的にクラスの定義を配置して、多くの他の人が定義したカスタムクラスを使った後、私たちも自分でカスタムクラス
解釈は以下の通り.まず@Configuration注記は、これが構成クラスであることを示しています. @E n a b l e ConfigurationProperties注記は、私たちが以前に@ConfigurationPropertiesを有効にし、構成された属性をBeanに正常に入れることです. @ConditionalOnClassは、プロジェクトの現在のclasspathの下にHelloServiceが存在する場合、後の構成が有効になることを示します. 自動構成クラスには、まずHelloPropertiesが注入され、この例にはアプリケーションが含まれている.propertiesで構成されている関連データ. HelloServiceのインスタンスを提供し、HelloPropertiesの値を入力します.
HTTPS:ハイパーテキスト転送セキュリティプロトコル(HyperText Transfer Protocol Secure)、略称:HTTPS;HTTP over TLS、HTTP over SSLまたはHTTP Secureと呼ばれることが多い)は、コンピュータネットワークを介して安全な通信を行う伝送プロトコルである.HTTPSはHTTP経由で通信するが、SSL/TLSでパケットを暗号化する.HTTPS開発の主な目的は,ウェブサイトサーバに対するアイデンティティ認証を提供し,交換データのプライバシーと完全性を保護することである.このプロトコルは、ネットビュー(Netscape)が1994年に初めて提案し、インターネットに拡張された.
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\Zhangjian_HTTPS_digital_certificate.p12 -validity 365
:
- genkey 。
- alias keystore 。
- keyalg RSA , 。
- keysize 。
- keystore 。
- validity , 。
Zhangjian_HTTPS_digital_certificate .p12
をSpring Bootプロジェクトのresourcesディレクトリの下にコピーする.アプリケーションでpropertiesには、# HTTPS
server.ssl.key-store=classpath:Zhangjian_HTTPS_digital_certificate.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=zjroot
プロジェクトを開始し、直接Httpプロトコルを使用してインタフェースにアクセスすると、httpsに変更してアクセスすると、結果は以下の通りです:「安全ではありません」:これは私たちが生成したhttps証明書がブラウザに認められないためですが、大丈夫です.私たちは直接クリックしてアクセスを続けることができます(実際のプロジェクトではブラウザで承認されたhttps証明書を交換するだけでいいです).
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = 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);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector() {
Connector connector = new
Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8081);
connector.setSecure(false);
connector.setRedirectPort(8080);
return connector;
}
}
ここでは、Httpの要求ポートを8081として構成し、8081からのすべての要求は、8080というhttpsのポートに自動的にリダイレクトされる.
その後、httpリクエストにアクセスすると、自動的にhttpにリダイレクトされます.テスト:
HTTPSへの移行に成功した.
Springbootのスターを手動で生成
私たちはSpring Bootを使っていますが、基本的にはStaterの便利さに酔っています.Starterは私たちに多くの自動化配置をもたらしてくれました.これらの自動化配置があれば、私たちは灰を吹くことなく生産レベルの開発環境を構築することができます.一部のパートナーはこのStarterが不思議だと思っています.実はスターもSpring+SpringMVCの基礎知識点で実現されています.実はStarterの核心は条件注記@Conditionalで、classpathの下にあるClassが存在すると、ある構成が有効になります.
pom.xml
にStarterの自動化構成クラスを追加すればいいです.以下のようにします.<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
構成が完了すると、まずアプリケーションを受け入れるHelloPropertiesクラスを作成します.propertiesに注入された値は、次のとおりです.
package com.zhangjian.springboot.springboot_learn_002;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "zhangjian")
public class HelloProperties {
private static final String DEFAULT_NAME = "ZhangJian";
private static final String DEFAULT_MSG = "hello~";
private String name = DEFAULT_NAME;
private String msg = DEFAULT_MSG;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
エラーを報告し、Componentを加えて解決する.解決Configuration Annotation Proessor not found in classpathは以下の通りである.
公式ソリューション、Maven導入依存:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-configuration-processor </artifactId>
<optional> true </optional>
</dependency>
HelloPropertiesクラスに戻ります.この構成クラスはよく理解しています.アプリケーションを使用します.propertiesで構成された属性値はこの例に直接注入され、@ConfigurationPropertiesタイプの安全な属性注入がアプリケーションされる.propertiesファイルの接頭辞
zhangjian
の属性がこのクラスに対応する属性に注入され、最後に使用する場合、アプリケーション.propertiesのプロファイルは、次のようになります.構成が完了したら、HelloPropertiesを定義し、簡単なsayメソッドを定義します.HelloServiceの定義は次のとおりです.package com.zhangjian.springboot.springboot_learn_002;
public class HelloService {
private String msg;
private String name;
public String sayHello() {
return name + " say " + msg + " !";
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
次は私たちの重軸劇で、自動的にクラスの定義を配置して、多くの他の人が定義したカスタムクラスを使った後、私たちも自分でカスタムクラス
HelloServiceAutoConfiguration
を定義します:package com.zhangjian.springboot.springboot_learn_002;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setName(helloProperties.getName());
helloService.setMsg(helloProperties.getMsg());
return helloService;
}
}
解釈は以下の通り.