将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,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年春季 0463-22T英语语音 参考试题

科目编号&#xff1a;0463 座位号&#xff1a; 2017─2018学年度第二学期期末考试 英语语音笔试题 (开卷) 2018年7月 根据读音规则为下列单词注音 &#xff08;10分&#xff09; Saturday 2. notify demand 4. country 5. answer 6. police pronounce 8. magazine popular…

python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel

读取数据import pandas as pdimport collectionsdef readLocationCodeForExcel():read_file r"test.xlsx"sheet_names {"库位码","地堆码"}sheet_data pd.ExcelFile(read_file) #读取sheet数据#sheet列表read_sheet_data sheet_data.sheet_n…

【渝粤教育】国家开放大学2018年春季 0553-21T色彩 参考试题

编号&#xff1a;0553 座位号&#xff1a; 2017&#xff5e;2018学年度第二学期期末考试 色彩试题 2018年7月 色彩写生画&#xff08;100分&#xff09; 题目&#xff1a;水粉色彩静物写生。 静物&#xff1a;由10件不同造型、色调、质感的静物组合并配置衬布 红色花瓶、鲜花一…

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

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

【渝粤教育】国家开放大学2018年春季 0609-21T中级财务会计(1) 参考试题

科目编号&#xff1a;0609 座位号 2017-2018学年度第二学期期末考试 中级财务会计&#xff08;1&#xff09; 试题 2018年 7 月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题3分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序…

flask查询mysql数据展示_flask下直接展示mysql数据库 字段

from flask importFlask,request,render_templatefrom flask_sqlalchemy importSQLAlchemyapp Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///test.db #这里用这个是不行的 注意修改为&#xff4d;&#xff59;&#xff53;&#xff51;&#xff4c; 才可以…

jersey spring_实施Jersey 2 Spring集成

jersey springJersey是Oracle提供的出色的Java JAX-RS规范参考实现。 去年&#xff0c;当我们开始为大容量网站构建RESTful后端Web服务时&#xff0c;我们选择使用JAX-RS API作为我们的REST框架和Spring框架来进行依赖项注入。 泽西岛是我们选择的JAX-RS实现。 项目启动时&…

【渝粤教育】国家开放大学2018年春季 0688-21T老年精神障碍护理 参考试题

编号&#xff1a;0688 座位号 2017&#xff5e;2018学年度第二学期期末考试 老年精神障碍护理&#xff08;开卷&#xff09;试题 2018年 5月 名词解释&#xff08;每题5分&#xff0c;共30分,&#xff09; 1、器质性精神障碍 2、谵妄 3、遗忘综合征 4、器质性幻觉症 5、老…

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

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

【渝粤教育】国家开放大学2018年春季 0703-21T经济学基础 参考试题

科目编号&#xff1a;0703 座位号 □□ 2017-2018学年度第二学期期末考试 经济学基础 试题 2018年7月 一、单项选择题&#xff1a;&#xff08;每题4分&#xff0c;共40分&#xff09; 经济学可以定义为&#xff08; &#xff09; 政府对市场制度的干预 企业赚取利润的活动 研…

elementui可编辑单元格_ElementUI 表格可编辑单元格

页面export default{components: {EditableCell: () > import(/components/EditableCell/EditableCell.vue),},data() {return {tableData:[{date:"2020-12-01",name:"my name is elementui",address:"浙江省杭州市西湖区",}]}},methods: {on…

【渝粤教育】国家开放大学2018年春季 3896T人文英语1 参考试题

试卷代号&#xff1a;3896 &#xff08;中央广播电视大学&#xff09;2018年春季学期“开放专科”期末考试 人文英语1 试题 2018年7月 注 意 事 项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸…

如何以及为什么使用Spoon分析,生成和转换Java代码

Spoon是分析&#xff0c;生成和转换Java代码的工具。 在本文中&#xff0c;我们将看到通过使用以编程方式处理代码的技术可以实现什么。 我认为这些技术不是很广为人知或使用&#xff0c;这很遗憾&#xff0c;因为它们可能非常有用。 谁知道&#xff0c;即使您不想使用Spoon甚…

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

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

【渝粤教育】21秋期末考试工程项目管理10324k2

1、()是项目投产前由建设单位进行的一项重要工作&#xff0c;是在完成建设阶段任务以后转入到建筑产品的生产以及产品经营的必要条件 &#xff08;2.5 分&#xff09; A&#xff0e;可行性研究 B&#xff0e;资金筹备 C&#xff0e;招标 D&#xff0e;生产准备 2、基础设施工程…

【渝粤教育】21秋期末考试建设工程法规10221k1

1、当事人既约定违约金&#xff0c;又约定定金的&#xff0c;一方违约时&#xff0c;这两种违约责任&#xff08;  &#xff09;。&#xff08;1 分&#xff09; A&#xff0e;可合并使用 B&#xff0e;适用数值较小者 C&#xff0e;适用数值较大者 D&#xff0e;只能选择其一…

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

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

【渝粤教育】21秋期末考试服务标准化10011k1

1、采用国际及国外先进标准时&#xff0c;表示“等同采用”的代号是&#xff1f;&#xff08;2 分&#xff09; A&#xff0e;MOD B&#xff0e;NEQ C&#xff0e;ISO D&#xff0e;IDT 2、从命名规则上判断&#xff0c;GB/Z 30556.1-2017《电磁兼容 安装和减缓导则 一般要求》…

嵌入式开发环境构建_设计模式:不可变的嵌入式构建器

嵌入式开发环境构建上周&#xff0c;我写了关于什么使图案成为反图案。 本周&#xff0c;我提出一种设计模式…或等待……也许这是一种反模式。 还是&#xff1f; 让我们看看&#xff01; 当有一个类可以构建另一个实例时&#xff0c;构建器模式是一种编程风格。 构建器模式的…

【渝粤教育】21秋期末考试财务管理10164k2

1、发放股票股利后&#xff0c;不会引起如下情形的有(   )。请在以下&#xff08;1&#xff09;-&#xff08;4&#xff09;中选出符合题意的全部选项&#xff1a;&#xff08;1&#xff09;改变股东的股权比例 &#xff1b;&#xff08;2&#xff09;增加企业的资产&#xf…