spring_将Spring Boot应用程序部署到Tomcat中

spring

spring

“我喜欢编写身份验证和授权代码。” 〜从来没有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 help

Enjoy!!!
[karl@localhost demo]

运行显示的source命令,并且sdk命令应该处于活动状态。

现在,只需使用sdk install java即可安装最新的Java。

[karl@localhost demo]$ sdk install java

Downloading: java 11.0.2-open

In 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标签(在Applications旁边),然后单击Authorization Servers 。 记下看起来如下的Issuer 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
    @ResponseBody
    public 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 (您可以通过将<finalName>demo</finalName>pom.xml的build部分来永久地执行此操作)。 现在,在管理器窗口中单击您的应用程序名称旁边的“取消部署” ,然后重新部署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存储库。

请查看以下一些链接以获取更多信息:

喜欢你今天学到的东西吗? 在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值