javascript
将Spring Boot应用程序部署到Tomcat中
“我喜歡編寫身份驗證和授權代碼。” ?從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。
部署應用程序很困難。 通常,您需要控制臺訪問服務器,從服務器中獲取最新代碼,然后手動實例化到您的容器中。 在本教程中,您將看到使用Tomcat的更簡單方法:創建經過身份驗證的Web應用程序,并使用最新版本的Tomcat,Spring Boot和Java通過瀏覽器進行部署。
從版本9開始,Oracle將Java發行周期降低到六個月,因此主要版本號的增長速度比以前快得多。 最新版本是Java SE 11 (標準版),于2018年9月發布。此新版本中最大的許可更改導致一個明顯的收獲:從現在開始使用OpenJDK。 Open JDK是Java的免費版本,您現在也可以從Oracle獲得它。 另外,Java 11具有長期支持,因此這是您以后將要用于新項目的版本。
啟動您的Java 11應用
打開控制臺并運行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是使您的開發庫保持最新狀態的出色工具。 要安裝它運行
$ curl -s "https://get.sdkman.io" | bash請注意,SDKMAN僅適用于Linux和類似Unix的系統。 Windows用戶將需要手動安裝最新的Java 。
如果SDKMAN安裝正確,您將看到有關使命令在當前終端中運行的說明。
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]運行顯示的source命令,并且sdk命令應該處于活動狀態。
現在,只需使用sdk install java即可安裝最新的Java。
[karl@localhost demo]$ sdk install javaDownloading: java 11.0.2-openIn progress...完成后, java -version應該顯示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]$注意:如果您已經有了SDKMAN! 并且安裝了Java 11,則可以使用sdk default java 11.0.2-open將其設置為默認sdk default java 11.0.2-open 。
為Tomcat創建一個Spring Boot項目
啟動Spring項目的最流行方法是使用Spring Initializr
在您喜歡的Web瀏覽器中導航到start.spring.io,然后選擇您的項目選項:
- 保留為Maven,Java和最新的穩定Spring Boot(2.1.4)
- 如果需要,請更改組和工件
- 單擊更多選項,然后選擇Java 11
- 在“ 依賴關系”框中,鍵入并選擇Web , Security和Devtools 。 它們應顯示為右側選擇的 “ 依賴關系 ”
現在,單擊Generate Project,然后將下載一個zip文件,其中包含該項目。 只需解壓縮并從命令行輸入目錄。 如果ls你會看到五個文件和一個目錄( src )。
[karl@m14x demo]$ ls HELP.md mvnw mvnw.cmd pom.xml srcmvnw是一個腳本,使您可以使用Maven而不進行全局安裝。 mvnw.cmd是此腳本的Windows版本。 pom.xml描述您的項目,而src包含您的Java代碼。 (請注意,嵌入式Maven文件所在的目錄還有一個.mvn隱藏目錄!)
讓我們看看該項目做什么。 輸入./mvnw spring-boot:run并按Enter。 可能需要一段時間才能安裝所有內容,但最終,您應該看到類似以下的內容:
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)請注意消息Tomcat started on port(s): 8080 。 打開瀏覽器窗口到http://localhost:8080 ,您應該看到一個登錄頁面。
您可以使用“ user”來驗證用戶名和已打印到終端的密碼。 登錄后,您會看到一個404錯誤頁面,因為您尚未創建任何代碼來顯示/的登錄頁面。
向您的Spring Boot應用添加安全身份驗證
讓我們添加Okta身份驗證。 為什么選擇Okta? 因為您不想擔心管理用戶和哈希其密碼的麻煩,對嗎? 朋友不讓朋友寫認證–讓Okta的專家代您為您做吧! 畢竟,Okta的API也是用Java和Spring Boot構建的!
注冊免費帳戶后,請轉到信息中心上的“ 應用程序 ”。 單擊“ 添加應用程序” ,選擇“ Web” ,然后單擊“ 下一步” 。
您現在應該在“應用程序設置”頁面中。 將“ 登錄重定向URI”字段替換為以下內容:
http://localhost:8080/login/oauth2/code/okta點擊底部的完成 。 從“客戶端憑據”部分復制您的客戶端ID和客戶端密碼 ,并將其保存在安全的地方。 現在,在頂部的“ API”選項卡上(“ 應用程序”旁邊),然后單擊“ 授權服務器” 。 記下頒發者URI ,如下所示:
https://{yourOktaDomain}/oauth2/default在項目中的src/main/resources/application.yml創建一個文件,并將這些值放入其中:
okta: oauth2:issuer: https://{yourOktaDomain}/oauth2/default client-id: {clientId}client-secret: {clientSecret}現在,在您的pom.xml添加Okta Spring Boot Starter庫作為依賴項。
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>1.1.0</version> </dependency>現在,編輯您的主要Java入口文件(可能類似于src/main/java/com/example/demo/DemoApplication.java ),并將@RestController注釋以及主頁入口點添加到該類中:
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重新啟動您的應用程序,或使用您的IDE來運行它。
現在,當您訪問http://localhost:8080您應該會看到Okta登錄屏幕。
輸入附加的Okta用戶的詳細信息(您可以在此處使用與Okta開發人員帳戶相同的登錄名)后,您應該會看到一條歡迎消息,其中包含您注冊時輸入的全名:
熱門提示:注銷OAuth2會話比人們最初想象的要細微得多。 為了繼續測試登錄過程,建議您使用專用瀏覽窗口以確保登錄屏幕返回; 完成后將其關閉。
停止您的Spring Boot應用程序,以便您可以在其默認端口8080上運行Tomcat。
為您的Spring Boot App設置Tomcat 9
安裝和運行Tomcat并非易事。 首先下載與您的平臺兼容的二進制文件 。 確保使用.zip或.tar.gz文件,而不要使用安裝程序。 解壓縮到一個位置,里面的bin目錄中運行啟動腳本- 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啟動您的應用程序。 此命令會將日志打印到您的終端,因此您無需拖尾日志即可查看正在發生的情況。
瀏覽到http://localhost:8080 ,您應該看到Tomcat安裝頁面。
從您的Spring Boot項目創建WAR文件
現在,您需要從Spring Boot應用程序中創建WAR文件。 在pom.xml的<description>節點之后添加以下內容。
<packaging>war</packaging>通過將以下內容添加到依賴項列表中來刪除嵌入式Tomcat服務器:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency>最后,通過使用SpringBootServletInitializer擴展您的主類,將您的應用程序作為servlet啟用:
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer {... }現在,使用以下命令清理并打包您的應用程序:
./mvnw clean package您應該看到類似以下的消息:
[INFO] Building war: /home/karl/tst/demo/target/demo-0.0.1-SNAPSHOT.war請注意您的新.war 。
從瀏覽器將WAR部署到Tomcat
您可能已經注意到,在Tomcat歡迎屏幕的右側是三個按鈕: Server Status , Manager App和Host Manager 。 您可以從Manager App部署WAR,但是它需要身份驗證(默認情況下沒有定義用戶)。
將以下內容添加到Tomcat目錄中的conf/tomcat-users.xml中:
<user username="karl" password="secret" roles="manager-gui" />您需要重新啟動Tomcat才能使此更改生效。 因為直接啟動它,所以您需要自己停止該過程。 使用ps aux | grep tomcat查找進程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]$在這里,我的進程ID是11813。使用kill命令將其殺死。
kill 11813像以前一樣通過使用startup.sh重新啟動服務器。 當您單擊Manager App按鈕時,您在上方輸入的用戶詳細信息將帶您進入Manager屏幕。
滾動到底部的“ 要部署的WAR文件”部分。 單擊瀏覽…,然后從之前選擇WAR文件。 點擊部署 。
如果向上滾動,應會在“ 應用程序”部分中看到類似/demo-0.0.1-SNAPSHOT的內容。 單擊此按鈕將帶我們到http://localhost:8080/demo-0.0.1-SNAPSHOT ,這是Tomcat從中為我們的應用程序提供服務的位置。 您會看到錯誤的請求錯誤。
這是因為在我們的Okta應用程序配置中,重定向URL現在是錯誤的–一切都應以demo-0.0.1-SNAPSHOT開頭。 這個名字有點麻煩。 要對其進行更改,請將您的WAR文件重命名為demo.war (可以通過在pom.xml的build部分中添加<finalName>demo</finalName>來永久執行此操作)。 現在,在管理器窗口中單擊您的應用程序名稱旁邊的“ 取消部署” ,然后重新部署WAR。 現在,該應用程序應位于/demo 。
現在,在Okta應用程序配置中,所有URL都以/demo ,例如http://localhost:8080/demo/login/oauth2/code/okta (您可以通過單擊Edit ,然后單擊Save來執行此操作)。 現在,在管理器中單擊您的/demo應用程序(或瀏覽至http://localhost:8080/demo ),應該會像以前一樣顯示歡迎屏幕。
熱門提示:為確保本地開發設置與要部署到的計算機匹配,請在pom.xml添加以下內容,以確保嵌入式Tomcat版本與外部服務器相同:
<properties><tomcat.version>9.0.19</tomcat.version> </properties>了解有關Tomcat,Spring Boot和Java 11的更多信息
做得好–您已經將Spring Boot 2.1應用程序遠程部署到了Tomcat 9,全部由Java 11支持!
希望本教程對您有所幫助。 您可以在oktadeveloper / okta-spring-boot-tomcat-example上找到此示例的GitHub存儲庫。
請查看以下一些鏈接以獲取更多信息:
- Java 11,Spring Boot和JavaScript中的i18n
- Spring Boot 2.1:出色的OIDC,OAuth 2.0和反應式API支持
- 將您的Spring Boot應用程序遷移到最新和最新的Spring Security和OAuth 2.0
- 使用Spring WebFlux構建反應性API
- 使用Spring Boot和MongoDB構建一個反應式應用程序
- Baeldung的如何將WAR文件部署到Tomcat
像您今天學到的一樣? 在Twitter上關注我們,并訂閱我們的YouTube頻道 。
“將Spring Boot應用程序部署到Tomcat中”最初于2019年4月16日發布在Okta開發人員博客上。
“我喜歡編寫身份驗證和授權代碼。” ?從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。
翻譯自: https://www.javacodegeeks.com/2019/04/deploy-spring-boot-application-tomcat.html
總結
以上是生活随笔為你收集整理的将Spring Boot应用程序部署到Tomcat中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aop 代码_项目学生:使用AOP简化代
- 下一篇: 普吉岛在哪个国家的领土(普吉岛属于哪个国