将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

Spring Boot应用程序

在您喜欢的Web浏览器中导航到start.spring.io,然后选择您的项目选项:

  • 保留为Maven,Java和最新的稳定Spring Boot(2.1.4)
  • 如果需要,请更改组和工件
  • 单击更多选项,然后选择Java 11
  • 在“ 依赖关系”框中,键入并选择WebSecurityDevtools 。 它们应显示为右侧选择的依赖关系

现在,单击Generate Project,然后将下载一个zip文件,其中包含该项目。 只需解压缩并从命令行输入目录。 如果ls你会看到五个文件和一个目录( src )。

[karl@m14x demo]$ ls
HELP.md  mvnw  mvnw.cmd  pom.xml  src

mvnw是一个脚本,使您可以使用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登录屏幕。

Spring Boot应用程序

输入附加的Okta用户的详细信息(您可以在此处使用与Okta开发人员帐户相同的登录名)后,您应该会看到一条欢迎消息,其中包含您注册时输入的全名:

Spring Boot应用程序

热门提示:注销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应用程序

从您的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 StatusManager AppHost 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屏幕。

Spring Boot应用程序

滚动到底部的“ 要部署WAR文件”部分。 单击浏览…,然后从之前选择WAR文件。 点击部署

如果向上滚动,应会在“ 应用程序”部分中看到类似/demo-0.0.1-SNAPSHOT的内容。 单击此按钮将带我们到http://localhost:8080/demo-0.0.1-SNAPSHOT ,这是Tomcat从中为我们的应用程序提供服务的位置。 您会看到错误的请求错误。

Spring Boot应用程序

这是因为在我们的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HD-SDI光端机是什么?其性能特点和技术参数有哪些?

HD-SDI光端机是将SDI信号与光信号互相转换的设备。SDI光端机的原理是发送端将SDI信号通过激光器调制后变为光信号,接收端将激光二极管收到的数据再编码为SDI信号。那么&#xff0c;HD-SDI光端机是什么呢&#xff1f;其性能特点和技术参数有哪些呢&#xff1f;接下来我们就跟随飞…

HD-SDI光端机有哪些优势?

3G-SDI光端机适合电视行业的高清可靠、高清性能的标准&#xff0c;杭州飞畅的3G-SDI光端机采用最新科技&#xff0c;采用H.264编码方式&#xff0c;采用高清SDI专用VIDIO SFP光模块&#xff0c;一般情况下采用SDI接口。其产品最早为广电行业客户开发使用&#xff0c;应用于电视…

PDH-SDH光端机指示灯具体含义介绍

最近有很多客户朋友来咨询有关PDH/SDH光端机各个指示灯含义的问题&#xff0c;其实在很多故障发生的时候我们都可以通过光端机各个指示灯的状态来分析故障问题&#xff0c;从而帮助解决问题。接下来我们就来为大家详细介绍一下PDH/SDH光端机指示灯的具体含义&#xff0c;感兴趣…

PDH光端机的主要作用以及特点有哪些?

在之前小编为大家介绍了光端机的详细分类&#xff0c;相信很多看过的朋友对pdh光端机这一块不陌生了吧&#xff0c;但是对于pdh光端机的作用以及特点你还了解吗&#xff0c;今天&#xff0c;飞畅科技的小编就来为大家详细介绍下pdh光端机的作用以及特点&#xff0c;感兴趣的朋友…

python将html存为pdf_用Python将HTML转为PDF。

上期提到了如何获取公众号文章信息&#xff0c;这回就说下怎么将网页转为PDF&#xff0c;方便日常学习。html而后扩散一下以前一个比赛的结果(华章计算机抖音大赛)。数据库顺便谈谈本身对从此送书的一个想法。微信另外以前的送书活动&#xff0c;有中奖的读者没有联系我&#x…

使用Gradle – 2019版从Travis可靠发布到Maven Central

得益于在2018年和2019年末实现的显式登台存储库创建功能集&#xff0c;使您&#xff08;自动&#xff09;从Travis&#xff08;不仅是&#xff09;发布到Maven Central更加可靠。 背景 如果您仅想获取信息&#xff0c;如何使您的工件从Travis发布更可靠&#xff0c;请前进到另…

spring admin mysql_easyadmin: 简易的java后台管理框架,基于SpringBoot+FreeMark+ace admin+mysql...

easyadmin数据库一定要用utf8mb4编码&#xff0c;记得先执行manager.sql&#xff0c;再执行initdata.sql,其中tenant表不用管&#xff0c;这是我打算做的另外一个项目设计的表&#xff0c;因为直接复制的本项目&#xff0c;怕到时候忘记&#xff0c;所以没有删除拦截器相关文档…

SDI高清视频光端机特点有哪些?

SDI视频光端机设计和生产是适用于电视行业的高可靠、高性能的串行数字光传输设备&#xff0c;信号格式从19.4Mbps到1.485Gbps, 系统支持SMPTE292、SMPTE259M、SMPTE297M、SMPTE305M、SMPTE310M以及DVB-ASI(EN50083-9)等数字电视格式的信号,满足工业级产品的要求。那么&#xff…

SDI光端机是什么?SDI光端机产品介绍及监控方案!

SDI光端机就是光信号传输的中端设备。光纤价格的降低使它在各个领域得到很好的应用&#xff0c;因此各个光端机的厂家就好比是雨后春笋般发展起来。但是这里的厂家大部分技术并不是完全成熟&#xff0c;开发新技术需要耗资和人力、物力等&#xff0c;这就产生厂家多是中小企业&…

adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件

adf可以自定义溶剂吗在本文中&#xff0c;我将重点介绍ADF Faces Javascript API方法以从客户端触发自定义事件。 例如&#xff1a; function cliListener(actionEvent) {AdfCustomEvent.queue(actionEvent.getSource(), "servListener",null, true);}我们可以使用a…

VGA光端机技术原理及应用领域介绍

VGA光端机采用纯数字传输模式&#xff0c;能从根本上克服普通铜芯电缆传输系统在传输高频带信号时造成的拖尾、重影等现象&#xff0c;清晰的重现图象画面。VGA光端机传输的是光信号&#xff0c;没有电磁辐射&#xff0c;系统具有极高的保密性。同时VGA光端机把显示设备和信号源…

java getbytes 长度_JAVA中的getBytes()方法

在Java中&#xff0c;String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下&#xff0c;返回的东西不一样&#xff01;String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示&#xff0c;如&…

按应用领域来划分,电话光端机主要分为哪几类

我们都知道&#xff0c;电话光端机就是把传统的电话信号转换成光信号并在光纤上进行传输的设备。但是对于电话光端机的分类这块&#xff0c;大家可能了解的并不是很清楚&#xff0c;电话光端机根据不同的分类方式&#xff0c;有着不同的分法&#xff0c;今天飞畅科技的小编主要…

光纤收发器长距离的传输过程出现死机的解决方案

光纤收发器是网络通信中必不可少的一种设备&#xff0c;但是&#xff0c;我们在使用过程中难免会遇到各种各样的问题&#xff0c;其中&#xff0c;光纤收发器出现死机可以说是很常见的一种故障&#xff0c;那么&#xff0c;光纤收发器经常会出现死机到底是什么原因&#xff0c;…

什么是光纤收发器?光纤收发器的两种连接方案你了解吗?

在如今这个科技飞速发展的时代&#xff0c;网络变得越来越重要&#xff0c;而说到网络的发展和建设&#xff0c;那就离不开光纤的大量应用了&#xff0c;怎样才能在网络建设中更快更稳定的实现光信号与电信号的相互转换&#xff0c;是我们要考虑的一个重要问题。而光纤收发器正…

maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤

maven项目 ant一段时间以来&#xff0c;我们一直在考虑将构建从蚂蚁移植到Maven。 它发生在上个月&#xff0c;实际上比我们预期的要简单。 根据我的经验&#xff0c;这里简要介绍了我们遵循的步骤。 我们的应用程序是一个具有多个框架和技术的企业Web应用程序构建&#xff0c;…

工业级千兆以太网光纤收发器产品介绍

工业级光纤收发器是一种可以延长传输距离的一种工业交换机&#xff0c;它具有便捷、维护简单、抗干扰性能强、性能强大、运行稳定等优点。产品设计符合以太网标准&#xff0c;性能稳定可靠。该设备可广泛应用于智能交通、电信、安防、金融证券、海关、海运、电力、水利及油田等…

Java 12新功能完整指南

六个月飞得如此之快&#xff0c;是时候再次仔细研究一下即将发布的新JDK版本。 让我们满足Java 12及其向开发人员介绍的功能。 自甲骨文推出其6个月加速发布节奏以来已经有一段时间了&#xff0c;要跟上每个版本及其添加到表中的功能越来越难了。 从好的方面来说&#xff0c;…

如何预防光纤光缆布线中的雷击伤害

众所周知&#xff0c;光纤是具有不导电性的&#xff0c;可以免受冲击电流&#xff0c;光缆也具有良好的防护性能&#xff0c;光缆中的金属构件对地绝缘值较高&#xff0c;雷电流不易进入光缆&#xff0c;但因为光缆具有加强芯&#xff0c;特别是直埋光缆具有铠装层&#xff0c;…

三步法教你快速解决光纤收发器故障

光纤收发器&#xff0c;是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;是网络通信中很重要的一种通信设备。但只要是机器&#xff0c;难免会有出现故障的时候&#xff0c;出现问题&#xff0c;找出问题&#xff0c;然后解决问题就…