javascript
将Spring Boot应用程序部署到Tomcat中
“我喜歡編寫身份驗(yàn)證和授權(quán)代碼。” ?從來(lái)沒有Java開發(fā)人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進(jìn)行托管身份驗(yàn)證,授權(quán)和多因素身份驗(yàn)證。
部署應(yīng)用程序很困難。 通常,您需要控制臺(tái)訪問(wèn)服務(wù)器,從服務(wù)器中獲取最新代碼,然后手動(dòng)實(shí)例化到您的容器中。 在本教程中,您將看到使用Tomcat的更簡(jiǎn)單方法:創(chuàng)建經(jīng)過(guò)身份驗(yàn)證的Web應(yīng)用程序,并使用最新版本的Tomcat,Spring Boot和Java通過(guò)瀏覽器進(jìn)行部署。
從版本9開始,Oracle將Java發(fā)行周期降低到六個(gè)月,因此主要版本號(hào)的增長(zhǎng)速度比以前快得多。 最新版本是Java SE 11 (標(biāo)準(zhǔn)版),于2018年9月發(fā)布。此新版本中最大的許可更改導(dǎo)致一個(gè)明顯的收獲:從現(xiàn)在開始使用OpenJDK。 Open JDK是Java的免費(fèi)版本,您現(xiàn)在也可以從Oracle獲得它。 另外,Java 11具有長(zhǎng)期支持,因此這是您以后將要用于新項(xiàng)目的版本。
啟動(dòng)您的Java 11應(yīng)用
打開控制臺(tái)并運(yùn)行java -version以查看所使用的Java版本。
[karl@localhost demo]$ java -version openjdk version "1.8.0_111" OpenJDK Runtime Environment (build 1.8.0_111-b16) OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode) [karl@localhost demo]$Java 8顯示為1.8.0 。
SDKMAN是使您的開發(fā)庫(kù)保持最新狀態(tài)的出色工具。 要安裝它運(yùn)行
$ curl -s "https://get.sdkman.io" | bash請(qǐng)注意,SDKMAN僅適用于Linux和類似Unix的系統(tǒng)。 Windows用戶將需要手動(dòng)安裝最新的Java 。
如果SDKMAN安裝正確,您將看到有關(guān)使命令在當(dāng)前終端中運(yùn)行的說(shuō)明。
All done!Please open a new terminal, or run the following in the existing one:source "/home/karl/.sdkman/bin/sdkman-init.sh"Then issue the following command:sdk helpEnjoy!!! [karl@localhost demo]運(yùn)行顯示的source命令,并且sdk命令應(yīng)該處于活動(dòng)狀態(tài)。
現(xiàn)在,只需使用sdk install java即可安裝最新的Java。
[karl@localhost demo]$ sdk install javaDownloading: java 11.0.2-openIn progress...完成后, java -version應(yīng)該顯示11.0.2 。
Done installing!Setting java 11.0.2-open as default. [karl@localhost demo]$ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode) [karl@localhost demo]$注意:如果您已經(jīng)有了SDKMAN! 并且安裝了Java 11,則可以使用sdk default java 11.0.2-open將其設(shè)置為默認(rèn)sdk default java 11.0.2-open 。
為Tomcat創(chuàng)建一個(gè)Spring Boot項(xiàng)目
啟動(dòng)Spring項(xiàng)目的最流行方法是使用Spring Initializr
在您喜歡的Web瀏覽器中導(dǎo)航到start.spring.io,然后選擇您的項(xiàng)目選項(xiàng):
- 保留為Maven,Java和最新的穩(wěn)定Spring Boot(2.1.4)
- 如果需要,請(qǐng)更改組和工件
- 單擊更多選項(xiàng),然后選擇Java 11
- 在“ 依賴關(guān)系”框中,鍵入并選擇Web , Security和Devtools 。 它們應(yīng)顯示為右側(cè)選擇的 “ 依賴關(guān)系 ”
現(xiàn)在,單擊Generate Project,然后將下載一個(gè)zip文件,其中包含該項(xiàng)目。 只需解壓縮并從命令行輸入目錄。 如果ls你會(huì)看到五個(gè)文件和一個(gè)目錄( src )。
[karl@m14x demo]$ ls HELP.md mvnw mvnw.cmd pom.xml srcmvnw是一個(gè)腳本,使您可以使用Maven而不進(jìn)行全局安裝。 mvnw.cmd是此腳本的Windows版本。 pom.xml描述您的項(xiàng)目,而src包含您的Java代碼。 (請(qǐng)注意,嵌入式Maven文件所在的目錄還有一個(gè).mvn隱藏目錄!)
讓我們看看該項(xiàng)目做什么。 輸入./mvnw spring-boot:run并按Enter。 可能需要一段時(shí)間才能安裝所有內(nèi)容,但最終,您應(yīng)該看到類似以下的內(nèi)容:
Tomcat started on port(s): 8080 (http) with context path '' 2019-03-17 19:56:49.342 INFO 10744 --- [ restartedMain] com.karl.demo.DemoApplication : Started DemoApplication in 3.022 seconds (JVM running for 3.56)請(qǐng)注意消息Tomcat started on port(s): 8080 。 打開瀏覽器窗口到http://localhost:8080 ,您應(yīng)該看到一個(gè)登錄頁(yè)面。
您可以使用“ user”來(lái)驗(yàn)證用戶名和已打印到終端的密碼。 登錄后,您會(huì)看到一個(gè)404錯(cuò)誤頁(yè)面,因?yàn)槟形磩?chuàng)建任何代碼來(lái)顯示/的登錄頁(yè)面。
向您的Spring Boot應(yīng)用添加安全身份驗(yàn)證
讓我們添加Okta身份驗(yàn)證。 為什么選擇Okta? 因?yàn)槟幌霌?dān)心管理用戶和哈希其密碼的麻煩,對(duì)嗎? 朋友不讓朋友寫認(rèn)證–讓Okta的專家代您為您做吧! 畢竟,Okta的API也是用Java和Spring Boot構(gòu)建的!
注冊(cè)免費(fèi)帳戶后,請(qǐng)轉(zhuǎn)到信息中心上的“ 應(yīng)用程序 ”。 單擊“ 添加應(yīng)用程序” ,選擇“ Web” ,然后單擊“ 下一步” 。
您現(xiàn)在應(yīng)該在“應(yīng)用程序設(shè)置”頁(yè)面中。 將“ 登錄重定向URI”字段替換為以下內(nèi)容:
http://localhost:8080/login/oauth2/code/okta點(diǎn)擊底部的完成 。 從“客戶端憑據(jù)”部分復(fù)制您的客戶端ID和客戶端密碼 ,并將其保存在安全的地方。 現(xiàn)在,在頂部的“ API”選項(xiàng)卡上(“ 應(yīng)用程序”旁邊),然后單擊“ 授權(quán)服務(wù)器” 。 記下頒發(fā)者URI ,如下所示:
https://{yourOktaDomain}/oauth2/default在項(xiàng)目中的src/main/resources/application.yml創(chuàng)建一個(gè)文件,并將這些值放入其中:
okta: oauth2:issuer: https://{yourOktaDomain}/oauth2/default client-id: {clientId}client-secret: {clientSecret}現(xiàn)在,在您的pom.xml添加Okta Spring Boot Starter庫(kù)作為依賴項(xiàng)。
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>1.1.0</version> </dependency>現(xiàn)在,編輯您的主要Java入口文件(可能類似于src/main/java/com/example/demo/DemoApplication.java ),并將@RestController注釋以及主頁(yè)入口點(diǎn)添加到該類中:
package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;@RestController @SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping@ResponseBodypublic String currentUserName(Authentication authentication) {DefaultOidcUser userDetails = (DefaultOidcUser) authentication.getPrincipal();return "Hello, " + userDetails.getFullName();} }使用./mvnw spring-boot:run重新啟動(dòng)您的應(yīng)用程序,或使用您的IDE來(lái)運(yùn)行它。
現(xiàn)在,當(dāng)您訪問(wèn)http://localhost:8080您應(yīng)該會(huì)看到Okta登錄屏幕。
輸入附加的Okta用戶的詳細(xì)信息(您可以在此處使用與Okta開發(fā)人員帳戶相同的登錄名)后,您應(yīng)該會(huì)看到一條歡迎消息,其中包含您注冊(cè)時(shí)輸入的全名:
熱門提示:注銷OAuth2會(huì)話比人們最初想象的要細(xì)微得多。 為了繼續(xù)測(cè)試登錄過(guò)程,建議您使用專用瀏覽窗口以確保登錄屏幕返回; 完成后將其關(guān)閉。
停止您的Spring Boot應(yīng)用程序,以便您可以在其默認(rèn)端口8080上運(yùn)行Tomcat。
為您的Spring Boot App設(shè)置Tomcat 9
安裝和運(yùn)行Tomcat并非易事。 首先下載與您的平臺(tái)兼容的二進(jìn)制文件 。 確保使用.zip或.tar.gz文件,而不要使用安裝程序。 解壓縮到一個(gè)位置,里面的bin目錄中運(yùn)行啟動(dòng)腳本- startup.sh用于Linux / Mac和startup.bat為Windows。
[karl@m14x bin]$ ./startup.sh Using CATALINA_BASE: /home/karl/Downloads/apache-tomcat-9.0.19 Using CATALINA_HOME: /home/karl/Downloads/apache-tomcat-9.0.19 Using CATALINA_TMPDIR: /home/karl/Downloads/apache-tomcat-9.0.19/temp Using JRE_HOME: /home/karl/.sdkman/candidates/java/current Using CLASSPATH: /home/karl/Downloads/apache-tomcat-9.0.19/bin/bootstrap.jar:/home/karl/Downloads/apache-tomcat-9.0.19/bin/tomcat-juli.jar Tomcat started. [karl@m14x bin]$熱門提示:您也可以使用./catalina.sh run啟動(dòng)您的應(yīng)用程序。 此命令會(huì)將日志打印到您的終端,因此您無(wú)需拖尾日志即可查看正在發(fā)生的情況。
瀏覽到http://localhost:8080 ,您應(yīng)該看到Tomcat安裝頁(yè)面。
從您的Spring Boot項(xiàng)目創(chuàng)建WAR文件
現(xiàn)在,您需要從Spring Boot應(yīng)用程序中創(chuàng)建WAR文件。 在pom.xml的<description>節(jié)點(diǎn)之后添加以下內(nèi)容。
<packaging>war</packaging>通過(guò)將以下內(nèi)容添加到依賴項(xiàng)列表中來(lái)刪除嵌入式Tomcat服務(wù)器:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency>最后,通過(guò)使用SpringBootServletInitializer擴(kuò)展您的主類,將您的應(yīng)用程序作為servlet啟用:
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer {... }現(xiàn)在,使用以下命令清理并打包您的應(yīng)用程序:
./mvnw clean package您應(yīng)該看到類似以下的消息:
[INFO] Building war: /home/karl/tst/demo/target/demo-0.0.1-SNAPSHOT.war請(qǐng)注意您的新.war 。
從瀏覽器將WAR部署到Tomcat
您可能已經(jīng)注意到,在Tomcat歡迎屏幕的右側(cè)是三個(gè)按鈕: Server Status , Manager App和Host Manager 。 您可以從Manager App部署WAR,但是它需要身份驗(yàn)證(默認(rèn)情況下沒有定義用戶)。
將以下內(nèi)容添加到Tomcat目錄中的conf/tomcat-users.xml中:
<user username="karl" password="secret" roles="manager-gui" />您需要重新啟動(dòng)Tomcat才能使此更改生效。 因?yàn)橹苯訂?dòng)它,所以您需要自己停止該過(guò)程。 使用ps aux | grep tomcat查找進(jìn)程ID ps aux | grep tomcat ps aux | grep tomcat 。
[karl@m14x bin]$ ps aux | grep tomcat karl 11813 180 1.9 7389172 159596 pts/0 Sl 09:44 0:07 /home/karl/.sdkman/candidates/java/current/bin/java -Djava.util.logging.config.file=/home/karl/Downloads/apache-tomcat-9.0.19/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /home/karl/Downloads/apache-tomcat-9.0.19/bin/bootstrap.jar:/home/karl/Downloads/apache-tomcat-9.0.19/bin/tomcat-juli.jar -Dcatalina.base=/home/karl/Downloads/apache-tomcat-9.0.19 -Dcatalina.home=/home/karl/Downloads/apache-tomcat-9.0.19 -Djava.io.tmpdir=/home/karl/Downloads/apache-tomcat-9.0.19/temp org.apache.catalina.startup.Bootstrap start karl 11881 0.0 0.0 6268 2280 pts/0 S+ 09:44 0:00 grep tomcat [karl@m14x bin]$在這里,我的進(jìn)程ID是11813。使用kill命令將其殺死。
kill 11813像以前一樣通過(guò)使用startup.sh重新啟動(dòng)服務(wù)器。 當(dāng)您單擊Manager App按鈕時(shí),您在上方輸入的用戶詳細(xì)信息將帶您進(jìn)入Manager屏幕。
滾動(dòng)到底部的“ 要部署的WAR文件”部分。 單擊瀏覽…,然后從之前選擇WAR文件。 點(diǎn)擊部署 。
如果向上滾動(dòng),應(yīng)會(huì)在“ 應(yīng)用程序”部分中看到類似/demo-0.0.1-SNAPSHOT的內(nèi)容。 單擊此按鈕將帶我們到http://localhost:8080/demo-0.0.1-SNAPSHOT ,這是Tomcat從中為我們的應(yīng)用程序提供服務(wù)的位置。 您會(huì)看到錯(cuò)誤的請(qǐng)求錯(cuò)誤。
這是因?yàn)樵谖覀兊腛kta應(yīng)用程序配置中,重定向URL現(xiàn)在是錯(cuò)誤的–一切都應(yīng)以demo-0.0.1-SNAPSHOT開頭。 這個(gè)名字有點(diǎn)麻煩。 要對(duì)其進(jìn)行更改,請(qǐng)將您的WAR文件重命名為demo.war (可以通過(guò)在pom.xml的build部分中添加<finalName>demo</finalName>來(lái)永久執(zhí)行此操作)。 現(xiàn)在,在管理器窗口中單擊您的應(yīng)用程序名稱旁邊的“ 取消部署” ,然后重新部署WAR。 現(xiàn)在,該應(yīng)用程序應(yīng)位于/demo 。
現(xiàn)在,在Okta應(yīng)用程序配置中,所有URL都以/demo ,例如http://localhost:8080/demo/login/oauth2/code/okta (您可以通過(guò)單擊Edit ,然后單擊Save來(lái)執(zhí)行此操作)。 現(xiàn)在,在管理器中單擊您的/demo應(yīng)用程序(或?yàn)g覽至http://localhost:8080/demo ),應(yīng)該會(huì)像以前一樣顯示歡迎屏幕。
熱門提示:為確保本地開發(fā)設(shè)置與要部署到的計(jì)算機(jī)匹配,請(qǐng)?jiān)趐om.xml添加以下內(nèi)容,以確保嵌入式Tomcat版本與外部服務(wù)器相同:
<properties><tomcat.version>9.0.19</tomcat.version> </properties>了解有關(guān)Tomcat,Spring Boot和Java 11的更多信息
做得好–您已經(jīng)將Spring Boot 2.1應(yīng)用程序遠(yuǎn)程部署到了Tomcat 9,全部由Java 11支持!
希望本教程對(duì)您有所幫助。 您可以在oktadeveloper / okta-spring-boot-tomcat-example上找到此示例的GitHub存儲(chǔ)庫(kù)。
請(qǐng)查看以下一些鏈接以獲取更多信息:
- Java 11,Spring Boot和JavaScript中的i18n
- Spring Boot 2.1:出色的OIDC,OAuth 2.0和反應(yīng)式API支持
- 將您的Spring Boot應(yīng)用程序遷移到最新和最新的Spring Security和OAuth 2.0
- 使用Spring WebFlux構(gòu)建反應(yīng)性API
- 使用Spring Boot和MongoDB構(gòu)建一個(gè)反應(yīng)式應(yīng)用程序
- Baeldung的如何將WAR文件部署到Tomcat
像您今天學(xué)到的一樣? 在Twitter上關(guān)注我們,并訂閱我們的YouTube頻道 。
“將Spring Boot應(yīng)用程序部署到Tomcat中”最初于2019年4月16日發(fā)布在Okta開發(fā)人員博客上。
“我喜歡編寫身份驗(yàn)證和授權(quán)代碼。” ?從來(lái)沒有Java開發(fā)人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進(jìn)行托管身份驗(yàn)證,授權(quán)和多因素身份驗(yàn)證。
翻譯自: https://www.javacodegeeks.com/2019/04/deploy-spring-boot-application-tomcat.html
總結(jié)
以上是生活随笔為你收集整理的将Spring Boot应用程序部署到Tomcat中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: aop 代码_项目学生:使用AOP简化代
- 下一篇: jersey spring_实施Jers