2019年4月4日 马特雷布尔
使用Java 12和JHipster 6更好,更快,更轻松的Java
最近在Java生态系统中发生了很多事情。现在主要的Java版本每六个月发布一次,可能很难跟上。就个人而言,我使用Spring Boot开发了大多数Java应用程序。因此,在去年10月Spring Boot 2.1发布之前,我被困在Java 8上。
Spring Boot 2.1增加了Java 11支持,性能改进,新的度量实现,新的执行器端点以及Spring Security的一流OIDC支持。
在成为Java开发人员之前,我是一名Web开发人员。我已经开发了20年的Java,所以这说了很多!如果您是Java开发人员,那么您可能会对JavaScript世界的变化速度感到困惑。如果您认为Java很难跟上,请尝试跟上JavaScript及其生态系统!好消息是有一个很好的方法来跟上两者:只使用JHipster。
JHipster 6使用Spring Boot 2.1作为其后端API,这意味着您可以使用Java 11+开发JHipster应用程序!
如果您更愿意观看视频,我会创建此博客文章的截屏视频。
JHipster如何使Java和JavaScript开发更容易?
JHipster是我在这个星球上最喜欢的开源项目之一。它是一个用于生成,开发和部署Spring Boot + Angular应用程序的开发平台。此外,它还支持React,Vue以及使用Netflix OSS,Elastic Stack和Docker创建微服务架构。
Java开发人员倾向于不喜欢JavaScript,但很多人都喜欢使用TypeScript。你猜怎么着?JHipster在其所有UI框架实现中使用TypeScript!
JHipster通过为您配置所有内容并使用其底层框架的最新版本,使Java和JavaScript开发更容易。想要升级您的应用以使用最新版本?简单地跑jhipster upgrade
。
安装Java 11或Java 12
在您担心安装JHipster之前,请安装Java 11.我建议使用SDKMAN!为了这个任务。如果您没有安装它,它只是一个命令:
curl -s "https://get.sdkman.io" | bash
安装完成后,您可以看到所有可用的Java 11版本sdk list java
。
安装OpenJDK版本:
sdk install java 11.0.2-open
如果您更愿意使用亚马逊的Corretto,只需使用11.0.2-amzn
该名称即可。如果你想尽可能的时髦,你甚至可以使用Java 12!
sdk install java 12.0.0-open
如果您使用12.0.0-zulu 名称,也可以使用Azul的Zulu 。 |
|
---|---|
安装JHipster 6
JHipster 6于2019年5月3日发布。您可以使用以下命令安装它。
npm install -g [email protected]
该npm 命令是Node.js的一部分。您需要让Node 10.x安装JHipster并运行有用的命令。 |
|
---|---|
创建一个在Java 11+上运行的Spring Boot + Angular App
开始使用JHipster的最基本方法是创建一个新目录,cd进入它并运行jhipster
。系统会提示您回答有关您要创建的应用的一些问题。问题范围从您的应用程序名称到您要使用的身份验证类型,再到SQL与NoSQL。
JHipster还有一种域语言(称为JLipster域语言的JDL),您可以使用它来定义您的应用程序。
application {
config {}
}
如果您使用上述代码创建应用程序,它将使用默认值:
- baseName的:
jhipster
- 申请类型:
monolith
- 数据库类型:
sql
- 等等
您可以在JHipster的JDL文档中看到所有默认值。 | |
---|---|
要使用JHipster生成启用OAuth 2.0的应用程序,请app.jh
在新项目目录中创建一个文件(例如~/hipapp
):
application {
config {
baseName hipapp
authenticationType oauth2
}
}
打开终端窗口并导航到与此文件相同的目录。运行以下命令以生成带有Angular UI的Spring Boot API。
确保你不在你的主目录中!您的项目将在与...相同的目录中生成app.jh 。 |
|
---|---|
jhipster import-jdl app.jh
这将创建大量文件并使用安装依赖项npm install
。运行此命令时,终端应类似于以下内容:
如果你想看看这个命令在行动中看起来是什么,你可以观看下面的录音。
<iframe src="https://asciinema.org/a/244194/embed?" id="asciicast-iframe-244194" name="asciicast-iframe-244194" scrolling="no" allowfullscreen="true" style="box-sizing: border-box; max-width: 100%; overflow: hidden; margin: 0px; border: 0px; display: inline-block; width: 804px; float: none; visibility: visible; height: 434px;"></iframe>
由于您指定oauth2
了身份验证类型,因此将为Keycloak安装Docker Compose配置。
Keycloak是Apache许可的开源身份和访问管理解决方案。除了src/main/docker/keycloak.yml
为Docker Compose 创建文件外,JHipster还会生成一个src/main/docker/config/realm-config
包含文件的目录,该目录将Keycloak配置为与JHipster开箱即用。
运行您的JHipster应用程序并使用Keycloak登录
必须运行Keycloak才能使您的JHipster应用程序成功启动。这是因为Spring Security 5.1的一流OIDC支持在JHipster 6中得到了充分利用。
此OIDC支持包括发现,这意味着Spring Security会与/.well-known/openid-configuration
端点进行通信以进行自我配置。我自己完成了迁移并删除了比我添加的代码更多的代码!
使用Docker Compose启动Keycloak:
docker-compose -f src/main/docker/keycloak.yml up -d
如果您没有安装Docker Compose,请参阅这些说明以了解如何安装它。 | |
---|---|
然后使用Maven启动您的应用程序:
./mvnw
当您的应用程序启动并运行时,请http://localhost:8080
在您喜欢的浏览器中打开并单击登录。您将被重定向到Keycloak,您可以在其中输入admin/admin
登录。
漂亮,嗯?您刚刚创建了一个使用最新发布的Angular版本的现代单页面应用程序(SPA)!不仅如此,它还使用最安全的OAuth 2.0形式 - 授权代码流。
如果您对OAuth 2.0和OpenID Connect(OIDC)如何协同工作感到困惑,请参阅什么是OAuth?简而言之,OIDC是OAuth 2.0之上的一个薄层,可以添加身份。 | |
---|---|
使用Okta:我们永远在线!
Keycloak是一个非常出色的项目,非常适合开发和测试。但是,如果您在生产中使用它,您将负责维护它,将其更新到最新版本,并确保它全天候运行。出于这些原因,我建议在生产中使用Okta。毕竟,我们一直都在!😃
创建一个OpenID Connect Web应用程序
首先,注册一个永久免费的Okta开发者帐户。
登录Okta后,注册您的客户端应用程序。
- 在顶部菜单中,单击“ 应用程序”
- 单击添加应用程序
- 选择Web,然后单击下一步
- 输入
Awesome OIDC
的名称(这个数值并不重要,可以随意去改变它) - 将Login重定向URI更改为
http://localhost:8080/login/oauth2/code/oidc
- 单击“完成”,然后单击“ 编辑”并添加
http://localhost:8080
为“注销”重定向URI - 单击保存
完成后,您的设置应类似于下面的屏幕截图。
okta.env
在项目的根目录中创建一个文件,并将{..}
值替换为Okta应用程序中的值:
export SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI="https://{yourOktaDomain}/oauth2/default"
export SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID="{clientId}"
export SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET="{clientSecret}"
添加*.env 到您的.gitignore 文件,以便此文件不会在您的源代码管理系统中结束。 |
|
---|---|
创建组并将其添加为ID令牌的声明
默认情况下,JHipster配置为使用两种类型的用户:管理员和用户。Keycloak自动配置了用户和组,但您需要为Okta组织进行一次性配置。
创建一个ROLE_ADMIN
和ROLE_USER
组(用户 > 组 > 添加组)并向其添加用户。您可以使用您注册的帐户,也可以创建新用户(“ 用户” >“ 添加人员”)。导航到API > 授权服务器,然后单击default
服务器。单击声明选项卡和添加声明。将其命名groups
,并将其包含在ID令牌中。将值类型Groups
设置为并将过滤器设置为正则表达式.*
。点击创建。
使用以下命令启动应用程序:
source okta.env
./mvnw
导航到http://localhost:8080
并使用您的Okta凭据登录。
Spring Boot和Spring Security如何轻松切换OIDC提供商,这不是很酷吗?!
与JHipster的CRUD
在这篇文章中,我几乎没有抓住JHipster所能提供的服务。例如,您可以使用JDL为实体(带有测试!)创建CRUD功能。例如,blog.jh
使用下面的代码创建一个文件。
entity Blog {
name String required minlength(3),
handle String required minlength(2)
}
entity BlogEntry {
title String required,
content TextBlob required,
date Instant required
}
entity Tag {
name String required minlength(2)
}
relationship ManyToOne {
Blog{user(login)} to User,
BlogEntry{blog(name)} to Blog
}
relationship ManyToMany {
BlogEntry{tag(name)} to Tag{entry}
}
paginate BlogEntry, Tag with infinite-scroll
然后jhipster import-jdl blog.jh
在你的项目中运行。该JDL-样品 GitHub的仓库有更多的例子。
使用JHipster做更多事情
我要感谢Spring Security团队的Joe Grandja和Rob Winch。没有他们的帮助,JHipster的迁移使用Spring Security 5.1是不可能的。你们摇滚!!
我没有为这篇文章创建一个GitHub存储库,因为生成了所有代码。你可以在GitHub上找到JHipster的源代码。
如果您对如何将JHipster的测试升级到Spring Security 5.1感兴趣,请参阅通过Java Hipster的Up升级Spring Security OAuth和JUnit测试。如果您想了解如何使用JHipster开发微服务,请参阅使用Spring Cloud Config和JHipster的Java微服务。
感谢JHipster及其所有出色的贡献者。你们都在闲暇时间做了大量的工作,非常感谢。
还没准备好向JHipster 6和Java 11+迈进吗?我写了一些使用JHipster 5和Java 8的教程。
- 使用React,Spring Boot和JHipster构建照片库PWA
- 使用OAuth 2.0和JHipster开发微服务架构
- 使用Ionic为JHipster创建具有OIDC身份验证的移动应用程序
- 使用React Native和Spring Boot构建移动应用程序
如果您想了解有关Spring Security 5.1及其OIDC支持的更多信息,我们也有一些支持:
- 使用Spring Security的OAuth 2.0快速指南
- 将您的Spring Boot应用程序迁移到最新和最好的Spring Security和OAuth 2.0
- Spring Boot 2.1:出色的OIDC,OAuth 2.0和Reactive API支持
在@oktadev上关注我们,以便及时了解Java和领先的JavaScript框架。
更新日志:
- 2019年5月10日:更新后使用JHipster 6.0 GA版本并嵌入截屏视频。可以在okta.github.io#2869中查看对此帖子的更改。
安装与配置
安装和配置nodejs
下载nodejs
https://nodejs.org/en/download/
安装nodejs到D:\nodejs
cd d:\nodejs
mkdir node_global
mkdir node_cache
配置环境变量:
NODE_PATH=d:\nodejs\node_global
PATH=%NODE_PATH%; d:\nodejs;……
配置NPM环境变量:
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
npm config set registry https://registry.npm.taobao.org
注意:这三个命令设置的信息会保存在在C:\Users\用户名.npmrc文件中,你也可以直接修改这个文件
检查版本
npm -v
node -v
安装Jhipster
npm install -g generator-jhipster
(可选)
npm install -g rimraf #我的环境中需要安装,否则在执行jhipster过程中报rimraf不是有效的命令错误
使用Jhipster
mkdir d:\work
cd work
jhipster
运行:
#分别在两个终端执行如下命令:
mvnw
npm start
401 not authorized
http://dinukshaish.blogspot.com/2017/02/oauth-20-dynamic-client-registration.html
http://hasanthipurnima.blogspot.com/2017/03/oidc-discovery-endpoint.html
确保这个地址可以匿名访问:
https://is.cd.mtn:9443/oauth2/token/.well-known/openid-configuration
sp的回调URL:
regexp=(http://192.168.200.24:8080/login/oauth2/code/oidc|http://192.168.200.24:8080)
Post logout URI does not match with registered callback URI