java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录

java heroku

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

大规模更新

我最初为本文撰写的代码更适合非Spring Boot环境。

Stormpath为其IDSite服务现有的Spring Boot集成使为其编写代码变得轻而易举 。 它利用了Spring Boot必须提供的所有自动配置。

如果您是新手,请继续阅读。 如果您以前阅读过它,请跳至“ 更新Spring Boot Webapp”部分。 您会看到RestrictedController从40行减少到15行,从4种方法减少到1行。

主要事件–轻松单点登录

我喜欢Java如何保持自我创新以保持最新和相关性(我可以听到我所有的Node.js和Ruby朋友吟)。 支持Java的生态系统也在跟上新的发展。 如今,与使用Python或Node.js一样快地构建,测试和部署丰富的Java Web应用程序一样容易(如今越来越难了)。

其中之一就是Spring Boot,它使在几分钟内构建和启动Java Webapp成为现实。 Heroku对Java支持的关注也加快了步伐。

最后,Stormpath意味着开发人员不必构建身份验证和授权工作流。 Stormpath的身份API和单点登录功能( 通过IDSite )提供了开箱即用的帐户注册,登录,电子邮件工作流以及跨应用程序的单点登录。 这些流程包括默认表单和视图,所有这些都是可定制的。

在这篇文章中,我们将把所有这些放在一起,并在20分钟内在您的应用程序中获得单点登录的额外好处。

继续阅读-滴答滴答!

这是本教程所需的先决条件:

  • Gradle2.x
    • 在Mac上: brew install gradle
  • Heroku
    • 创建一个Heroku帐户
  • 一个Stormpath帐户(我们还将在下面介绍)

注意 :您可以轻松使用Maven 。 如果您更喜欢此构建工具,则本文附带的源代码包括pom.xml

为了使其变得超级容易,我们在每个示例中都添加了一个方便的Heroku部署按钮,因此您可以立即查看它的运行情况。 如果您花了超过20分钟的时间,请在评论中告诉我们是什么阻止了您。 我们喜欢反馈。

启动Spring Boot – 5分钟教程

注意 :如果您已经对Spring Boot有所了解,则可能需要跳到下一部分。 在那里–我刚刚为您节省了5分钟。 别客气。

本节使用github存储库中的SpringBootBasic标签。

纽扣

Spring Boot使您能够启动一个功能全面的Java Web应用程序,就像启动一个简单的Java应用程序一样。 它具有main方法和所有内容。 例如, @SpringBootlApplication注释执行@Configuration @EnableAutoConfiguration@ComponentScan @EnableAutoConfiguration@ComponentScan注释(具有默认属性)在@EnableAutoConfiguration Spring应用程序中所做的所有操作。

令Spring Boot如此出色且如此轻松工作的是Starter软件包,这些软件包增加了功能,包括默认配置。 我们将在Stormpath Spring Boot Thymeleaf Starter的所有Stormpath功能中进一步使用它们来创建新用户,登录和更改密码。 您要做的只是在build.gradlepom.xml文件中引用一个jar。

对于我们的基本示例,我们将包括核心Spring Boot Starter Web和Thymeleaf Spring Boot Starter。 Thymeleaf是现代HTML 5 Java模板引擎。

这是我们的build.gradle

buildscript {repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")}
}apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'spring-boot'group = 'com.stormpath'
version = '0.1.0'sourceCompatibility = 1.8
targetCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'1.2.5.RELEASE'compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version:'1.2.5.RELEASE'
}

要使我们的基本Spring Boot应用程序正常运行,我们还需要三个文件。

IDSiteDemoApplication.java是应用程序的入口点:

package com.stormpath.idsite_demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class IDSiteDemoApplication {public static void main(String[] args) {SpringApplication.run(IDSiteDemoApplication.class, args);}
}

@SpringBootApplication批注设置了启动应用程序所需的所有配置。

HomeController.java映射URI并解析为Thymeleaf模板:

package com.stormpath.idsite_demo.controllers;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HomeController {@RequestMapping("/")public String home() {return "home";}
}

@Controller@RequestMapping批注将此类设置为控制器,并将其配置为处理/ URI上的请求。 只需将String home钩子返回到Thymeleaf模板体系结构中,即可将我们引到最终文件:

位于templates文件夹中的home.html是浏览至/时将呈现的模板:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head><th:block th:include="fragments/head :: head"/></head><body><div class="container-fluid"><div class="row"><div class="box col-md-6 col-md-offset-3"><div class="stormpath-header"><img src="http://stormpath.com/images/template/logo-nav.png"/></div><h1>Hello!</h1></div></div></div></body>
</html>

注意 :您可能会注意到上面模板中的th:include指令。 这是Thymeleaf体系结构的一部分,用于将文件包含在其他文件中。 该示例的完整源代码包含templates/fragments/head.html文件。

那好吧 让我们通过启动最基本的Spring Boot应用程序来完善前5分钟。

gradle clean build可以解决问题。 然后: java -jar build/libs/idsite_demo-0.1.0.jar

build_it_one

为SpringBoot身份验证添加Stormpath

本节使用github存储库中的SpringBootStormpath标记。

纽扣

在本节中,我们将:

  • 创建一个Stormpath帐户
  • 生成Stormpath API密钥对
  • 将应用程序添加到您的Stormpath帐户
  • 更新您的Spring Boot网络应用程序以显示一些Stormpath应用程序信息
  • 点火并观看它的工作情况

创建一个Stormpath帐户

转到“风暴路径注册”页面 。 输入您的名字和姓氏,公司,电子邮件和密码。

spring-boot-heroku-register

单击注册。

点击收到的验证电子邮件中的链接。 然后,您将看到为您生成的租户名称。

spring-boot-heroku-login

登录。 做完了

注意 :有关多租户应用程序的更多信息,我们上面有一个方便的博客文章 。

生成Stormpath API密钥对

登录到Stormpath帐户后,您将看到以下屏幕:

弹簧启动heroku仪表板

单击Create API Key按钮。

api_key

单击Create API Key按钮并保存文件。

存储在该文件中的API密钥用于向Stormpath验证您的应用程序。 在该文件中,有一个apiKey.idapiKey.secret 。 您永远都不想暴露apiKey.secret 。 因此,例如,您永远不需要将api密钥文件签入git存储库。 稍后,当我们部署到Heroku时,我将向您展示如何配置您的应用程序以使用api密钥,而不必将它们存储在git存储库中。

Stormpath使用了详细记录的配置默认值,使使用我们的API变得超级容易。 这些默认值之一是api密钥文件位置。 Java SDK将自动在您的主目录中查找文件:

~/.stormpath/apiKey.properties

如果将下载的文件复制到该路径,则不需要其他配置即可从应用程序连接到Stormpath。

将应用程序添加到您的Stormpath帐户

返回管理控制台,点击“应用程序”标签。

应用领域

您会注意到已经存在两个应用程序: My ApplicationStormpath 。 他们在注册Stormpath时自动设置。 如果没有定义任何其他Stormpath应用程序,则Spring Boot应用程序不需要进一步的配置。 默认情况下,它将连接到已定义的“ My Application实例。

但是,这里的最终目标是获得一些Single Signon的好处,为此,我们需要多个应用程序才能登录。

因此,让我们创建另一个Stormpath应用程序。 单击Create Application按钮。

new_application

让我们在这里分解选项。

名称和(可选)描述不言自明。 而且,我们希望此应用程序已启用是有意义的。

默认情况下,“ Create new Directory复选框处于选中状态。 对于我们的示例,我未选中此选项。 相反,我已经选中了“将Map Account Stores to this Application复选框,并选择了“ My Application Directory 。 最后,我单击了“ DEFAULT ACCOUNT LOCATION和“ DEFAULT GROUP LOCATION单选按钮。

那么,这是怎么回事? Stormpath的组织方式,应用程序可以使用任意数量的目录作为其帐户存储。 Stormpath目录只是包含帐户和组的存储桶。 出于我们的目的,我们可以使用注册时为我们自动创建的目录My Application Directory 。 在下面的奖励部分,我将向您展示如何创建特定类型的目录,以将Google身份验证添加到您的应用中。 剧透警报:超级容易。

更新您的Spring Boot Webapp

让我们将基本的Spring Boot应用程序连接到Stormpath,以显示一些Stormpath应用程序信息。 这将为能够与ID网站服务集成奠定基础。

看看我们的HomeController

package com.stormpath.idsite_demo.controllers;@Controller
public class HomeController {@AutowiredApplication app;@RequestMapping("/")public String home(Model model) {model.addAttribute("appName", app.getName());model.addAttribute("appDescription", app.getDescription());return "home";}
}

现在,我们利用了Spring的@Autowired功能,为我们提供了Stormpath Application对象的句柄。 使用它,我们在Model对象中设置应用程序的名称和描述,并将其传递给我们的模板。

这将我们带入下一个更改,即home.html Thymeleaf模板:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head><th:block th:include="fragments/head :: head"/></head><body><div class="container-fluid"><div class="row"><div class="box col-md-6 col-md-offset-3"><div class="stormpath-header"><img src="http://stormpath.com/images/template/logo-nav.png"/></div><h1 th:inline="text">Hello! Welcome to App: [[${appName}]]</h1><h3 th:inline="text">[[${appDescription}]]</h3></div></div></div></body>
</html>

使用Thymeleaf表示法将信息拉出模型,我们引用了[[${appName}]][[${appDescription}]]

最后,我们将进行一个小(但功能强大)的更新以build.gradle文件。 我们正在更改此行:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version:'1.2.5.RELEASE'

对此:

compile group: 'com.stormpath.spring', name: 'spring-boot-starter-stormpath-thymeleaf', version:'1.0.RC4.5'

我们已经将Spring的Thymleaf Spring Boot Starter换成Stormpath的了。 这是很酷的一点:此Starter中包含了与Stormpath Java SDK交互所需的一切。

我们的应用程序文件中总共更改了7行,并添加了一个文件application.properties以开始挂接到Stormpath。

构建您的Java Web应用程序

我们在这里需要的其他一点信息是您创建的Stormpath应用程序的URL。

您可以导航到您的应用程序,从管理仪表板中找到它。

application_id

假设您将api密钥文件放在~/.stormpath/apiKey.properties的默认位置,这是运行此示例所需的全部工作:

gradle clean build
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/6bHOGj63WM8cfC2nhD3Pki \java -jar build/libs/idsite_demo-0.1.0.jar

当然,您需要放入自己的STORMPATH_APPLICATION_HREF

app_info

您可以看到浏览器中的页面现在正在显示来自我们创建的Stormpath应用程序的信息。

使用IDSite的Stormpath单点登录…

…你猜到了。 五分钟。

本节使用github存储库中的SpringBootStormpathIDSite标记。

纽扣

您可能有向应用程序添加身份验证和授权的经验。 也许您是预先完成的。 也许那是您说过要达成的目标-最终。 无论哪种方式,这都很痛苦。 而且,它与您要解决的问题无关。 但是,这是至关重要且必要的。

在本节中,我们将添加以下功能:创建新用户,登录,将页面访问权限限制为仅那些已登录用户和更改密码。 并且,我们将以最少的编码和最少的配置来做到这一点。

标识站点配置

首先,我们将从管理控制台设置IDSite。 单击“ ID站点”选项卡。

id_site_1

滚动时,您会发现有许多字段带有标签Upgrade Required 。 基本ID网站功能可与我们的免费套餐一起使用,我们将在稍后看到。 具有自定义域或自定义用于身份验证的模板需要付费订阅。

在这里,我们只是要更新两个字段并保存设置。

id_site_2

为了安全起见,您必须指定一个允许与ID网站建立连接的URL列表。

在“ Authorized Javascript Origin URLs字段中输入http://localhost:8080

出于安全原因,您必须指定授权重定向URL的列表。

Authorized Redirect URLs字段中输入http://localhost:8080/并在另一行中输入http://localhost:8080/idSiteResult

单击Save按钮。 这就是配置ID站点以在应用程序中启用身份验证和授权所需要的。

让我们退后一步,用我们5分钟中宝贵的30秒时间来查看ID网站背后的机制。

当用户尝试访问您网站的受限区域时,如果他们尚未拥有有效的会话,他们将被重定向到您的ID网站。

他们将看到一个熟悉的登录表单,其中包含用于创建新用户和重置其密码的选项。

id_site_login

这个是从哪里来的? 这是魔术吗? 这是使用ID Site的一部分-通常由您自己编写的所有身份验证和授权流程。 不良。 (哎呀,这有点苛刻。但是,认真的说,由于身份验证代码实施不当,您多久阅读一次有关安全漏洞的信息?)

身份验证后,它们将被重定向回您指定的URL,并将能够访问该受限内容。

您的用户似乎完全熟悉此过程-甚至平凡。 您将只需很少的配置或编码即可完成此任务。

更新您的Spring Boot Webapp

启用对您的Spring启动应用程序IDSite是在一个单一的财产处理application.properties 。 我们还将另外两条线来控制流。

stormpath.web.idSite.enabled = true
stormpath.web.login.nextUri = /restricted/secret
stormpath.web.logout.nextUri = /?status=logout

第1行为您的应用程序启用IDSite。 对。 这就是全部!

IDSite具有默认的标准身份验证流。 默认情况下,在验证用户身份之后, /login重定向到/ ,在会话被销毁后, /logout重定向到/login?status=logout

对于我们的应用程序,一旦用户通过身份验证,我们希望他们重定向回/restricted/secret 。 而且,一旦用户注销,我们将以状态logout将他们重定向回前门。 上面的第2行和第3行完成了此操作。

我们在home.html模板中添加了一行,以启动整个登录流程:

<a class="btn btn-success" href="/restricted/secret">Click here for a secret message.</a>

我们将在一个新的控制器中添加大约15行代码(总计)以挂接到ID Site。
让我们看一下该控制器RestrictedController.java

package com.stormpath.idsite_demo.controllers;@Controller
public class RestrictedController {@AutowiredApplication app;@Value("#{ @environment['stormpath.sso.cross.link'] ?: '/' }")private String crossLink;@Value("#{ @environment['stormpath.sso.message.primary'] ?: 'Primary' }")private String messagePrimary;@Value("#{ @environment['stormpath.sso.message.secondary'] ?: 'Secondary' }")private String messageSecondary;@RequestMapping("/restricted/secret")public String secret(HttpServletRequest request, Model model) {Account account = AccountResolver.INSTANCE.getAccount(request);if (account == null) {return "redirect:/login";}model.addAttribute("appName", app.getName());model.addAttribute("crossLink", crossLink);model.addAttribute("messagePrimary", messagePrimary);model.addAttribute("messageSecondary", messageSecondary);return "restricted/secret";}
}

让我们分解一下:

第8、11和14行使用标准的Spring工具来注入值。

引用环境变量ala @environment['stormpath.sso.message.primary']提取在applications.properties中找到的属性。

这是最重要的部分:Stormpath具有将系统环境变量转换为应用程序环境变量的内置工具。 这使我们在Heroku这样的部署环境中设置环境变量变得非常容易。

它是这样工作的:将系统环境变量转换为小写,并将下划线替换为句点。

因此, STORMPATH_SSO_MESSAGE_PRIMARY被转换为stormpath.sso.message.primary

crossLink用于单点登录的环境。 此变量包含指向IDSite中设置的另一个应用程序的受限页面的完全限定URL。

messagePrimarymessageSecondary用于设置在受限页面上显示的消息。

这三个变量使我们可以将相同的代码库部署到多个Heroku应用程序,并在受限页面上显示不同的消息。

这是IDSite在幕后发生的事情:

  1. 在主页上,单击“ Click here for a secret message. 链接到/restricted/secret
  2. 根据@RequestMapping注释输入RestrictedControllersecret方法。
  3. 由于尚未建立会话,因此account变量将显示为null
  4. 根据第22行的条件,您将被重定向到/login页面。
  5. 登录页面由您的IDSite托管。
  6. 输入凭据并单击“ Login按钮后,您将被重定向回您的应用程序。
  7. 您的Spring Boot应用程序会自动处理IDSite重定向回的/idSiteResult回调。
  8. 基于在设置applications.properties ,内置IDSite回调处理程序将重定向到/restricted/secret
  9. 这一次,有一个会话, account变量将不会为null
  10. 最后,将返回restricted/secret模板。

第6行和第10行之间的所有重定向都在眨眼之间发生。

让我们看一下新模板, restricted/secret.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head><title>Hello World!</title><th:block th:include="fragments/head :: head"/></head><body><div class="container-fluid"><div class="row"><div class="box col-md-6 col-md-offset-3"><div class="stormpath-header"><img src="http://stormpath.com/images/template/logo-nav.png"/></div><h1 th:inline="text">[[${appName}]] App</h1><h1 th:inline="text">Hey, [[${account.fullName}]]</h1><h3 th:utext="${messagePrimary}">Primary</h3><h4 th:utext="${messageSecondary}">Secondary</h4><a class="btn btn-danger" href="/logout">Log Out</a><a class="btn btn-success" href="/">Go Home</a><a class="btn btn-warning" th:href="@{${crossLink}}">SSO: Jump to Other Site</a></div></div></div></body>
</html>

从与ID网站进行交互的角度来看,这里有两行有趣的内容。

<h1 th:inline="text">Hey, [[${account.fullName}]]</h1>

此行访问AccountfullName属性,该属性在传入模板的模型中自动设置。

<a class="btn btn-danger" href="/logout">Log Out</a>

/logout端点由IDSite自动处理,并销毁现有会话。

启动您的Webapp并试用

像以前一样启动应用程序:

gradle clean build
STORMPATH_APPLICATION_HREF=https://api.stormpath.com/v1/applications/6bHOGj63WM8cfC2nhD3Pki \java -jar build/libs/idsite_demo-0.1.0.jar

由于我们尚未在Stormpath目录中定义任何用户,因此让我们创建一个新用户,然后确保我们可以以该用户身份登录和注销。

首先,浏览到前门: http://localhost:8080

受限家庭

单击友好的绿色按钮。

id_site_login

点击Create an Account链接。

创建帐号

单击友好的绿色按钮。

受限制的

晕! 我们进来了!

如果现在单击绿色按钮,将带您回到主页。 如果然后单击主页上的绿色按钮,则将直接转到受限页面。 您将不会再看到登录表单。 这是因为您建立了有效的会话。

登录

如果单击红色按钮,您将注销并重定向到主页。 单击绿色按钮将您带入会话,这将使您再次进入登录表单。

您可能会注意到,创建帐户后,我们将立即登录并发送到受限页面。 您可以通过在Stormpath管理控制台中要求电子邮件验证作为帐户创建过程的一部分来放慢速度。

注意 :存在一个已知问题,您无法在同一会话中登录到Stormpath Admin仪表板并使用ID Site进行身份验证。 我们正在努力尽快解决此问题。 它永远不会影响您的用户,因为它们永远不会出现在您的Stormpath Admin仪表板中。 目前,使用Stormpath Admin Dashbaord时,请使用单独的浏览器配置文件或单独的浏览器实例。

在5分钟内使用Heroku进行单点登录

本节使用github存储库中的SpringBootStormpathIDSite标记。

纽扣

注意 :如果要测试SSO而不自行部署,则可以使用上方的Heroku Deploy按钮部署两个不同的Heroku Apps。

! 回家舒展! 那么,我一直在听到这么多的SSO是什么? 有了我们建立的基础,我们现在可以将该Web应用程序的多个实例部署到Heroku。 所以呢? 我会告诉你“那又怎样!”

我们可以部署Web应用程序的多个实例虽然很新颖,但真正赋予它强大功能的是ID Site的单一登录功能。 在本节结束时,您将看到通过登录该Web应用程序的一个实例,您可以浏览到该Web应用程序的另一个实例的受限页面, 无需再次登录。

首先,我们需要添加一个文件,以便Heroku知道如何启动我们的应用程序。 这是一个单行的Procfile

web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/*.jar

注意bash样式变量: $PORT 。 这是由Heroku自动填充的,不需要我们明确设置。

让我们设置和部署一个Heroku应用程序,并确保一切正常

heroku apps:create idsite-demo-app1 --remote idsite-demo-app1

注意命令末尾的--remote 。 Heroku自动将git远程添加到本地存储库,以便能够部署您的应用程序。 默认情况下,此遥控器将命名为heroku 。 由于我们将部署该应用程序的多个实例,因此我们需要不同的远程名称。

现在,我们已经创建了应用程序,我们需要设置一些配置参数。 这是秘密秘诀的一部分,它使我们可以部署相同的代码库,但将Web应用程序链接到不同的Stormpath应用程序。

heroku config:set \STORMPATH_API_KEY_ID=<your api key id> \STORMPATH_API_KEY_SECRET=<your api key secret> \STORMPATH_APPLICATION_HREF=<your app href> \STORMPATH_SSO_CROSS_LINK=https://idsite-demo-app2.herokuapp.com/restricted/secret \STORMPATH_SSO_MESSAGE_PRIMARY="The secret is that chocolate is delicious"'!' \STORMPATH_SSO_MESSAGE_SECONDARY="Yummy"'!' \
--app idsite-demo-app1

假设您已经将另一个名为idsite-demo-app2应用程序部署到了Heroku。 该应用程序的受限页面上使用STORMPATH_SSO_CROSS_LINK链接到其他应用程序。 一切设置正确后,您无需再次登录。 这就是单点登录的强大功能!

还记得我之前说过的Stormpath如何进行自我配置的好处之一是,您不需要在代码中嵌入敏感的api密钥信息吗? 这就是所有的地方。 在上面的命令中,我们为Heroku实例设置环境变量。 Stormpath SDK自动检查STORMPATH_API_KEY_IDSTORMPATH_API_KEY_SECRETSTORMPATH_APPLICATION_HREF环境变量是否存在。 如果存在,则SDK在与API交互时将自动使用这些环境变量中的值。 这就是将我们的Spring Boot Web应用程序连接到正确的Stormpath应用程序的原因。

好。 设置好舞台。 让我们部署我们的应用程序!

git push idsite-demo-app1 master

这会产生大量输出,但让我们看一下其中的一些亮点:

remote: Compressing source files... done.        
remote: Building source:        ...remote:        [INFO]                                                                                 
remote:        [INFO] ------------------------------------------------------------------------        
remote:        [INFO] Building demo 0.0.1-SNAPSHOT        
remote:        [INFO] ------------------------------------------------------------------------        ...remote:        [INFO] Installing /tmp/build_a7299c4194f003c6e3730e568a540e82/target/demo-0.0.1-SNAPSHOT.jar to /app/tmp/cache/.m2/repository/com/stormpath/idsite_demo/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.jar        remote:        [INFO] ------------------------------------------------------------------------        
remote:        [INFO] BUILD SUCCESS        
remote:        [INFO] ------------------------------------------------------------------------        ...remote: -----> Discovering process types        
remote:        Procfile declares types -> web        
remote: 
remote: -----> Compressing... done, 63.6MB        
remote: -----> Launching... done, v6        
remote:        https://idsite-demo-app1.herokuapp.com/ deployed to Heroku        
remote: 
remote: Verifying deploy.... done.        
To https://git.heroku.com/idsite-demo-app1.git* [new branch]      master -> master

Procfile ,Heroku正在基于我们的Procfile发现进程类型。 在这种情况下,它是web

我们第一个应用程序的最后一项工作是将ID Site配置为接受来自它的连接并重定向到它。 跳回到ID站点的管理控制台,然后将https://idsite-demo-app1.herokuapp.com添加到“授权Javascript原始URL”列表中,然后添加https://idsite-demo-app1.herokuapp.com/https://idsite-demo-app1.herokuapp.com/idSiteResult到授权重定向URL列表。

id_site_3

确保单击屏幕底部的“ Save按钮。

并且, https ://idsite-demo-app1.herokuapp.com/准备就绪! 看看这个。 创建一个帐户。 登录并注销。 玩得开心。

现在,我们到达了SSO应许之地的大门。 这就是所有要做的事情:

  • 创建另一个Stormpath应用程序
  • 创建另一个Heroku应用程序
  • 设置新的Heroku应用程序的配置
  • 将我们的Spring Boot应用程序部署到新的Heroku应用程序
  • 更新我们的ID网站,以包括用于授权来源和重定向的新URL

我们只是在漂洗并重复我们以前所做的事情。

让我们创建新的Stormpath应用程序:

new_application_2

请注意,我们正在为此新应用程序映射相同的帐户存储。

是时候创建一个新的Heroku应用程序了

heroku apps:create idsite-demo-app2 --remote idsite-demo-app2

并且,配置它:

heroku config:set \STORMPATH_API_KEY_ID=<your api key id> \STORMPATH_API_KEY_SECRET=<your api key secret> \STORMPATH_APPLICATION_HREF=<your app href> \STORMPATH_SSO_CROSS_LINK=https://idsite-demo-app1.herokuapp.com/restricted/secret \STORMPATH_SSO_MESSAGE_PRIMARY="The secret is that ice cream is delicious"'!' \STORMPATH_SSO_MESSAGE_SECONDARY="Yummy"'!' \
--app idsite-demo-app2

确保使用新创建的Stormpath应用程序的完整URL。

部署时间:

git push idsite-demo-app2 master

最后,ID网站URL更新:

id_site_4

现在,您可以在待办事项列表上选中以下复选框:构建和部署SSO应用程序。 你完成了!

so

您可以登录到https://idsite-demo-app1.herokuapp.com 。 然后,您可以直接跳至https://idsite-demo-app2.herokuapp.com/restricted/secret ,而无需再次登录!

祝您满意!

在本文中,您已经创建了一个Spring Boot Web应用程序,该应用程序启用了具有Stormpath的ID站点服务的Single Sign-On。 Stormpath托管登录表单以及与创建新用户和重置密码相关的所有其他链接和表单。

通过一个控制器中的少量代码,您就可以为您的应用程序认证和授权用户。 您可以使用Heroku快速部署它。 我很想听听您使用本文中的示例的经验。

如果您有兴趣在Spring Boot中使用Stormpath的更多功能,这是我们的Spring Boot Webapp示例快速入门

随时随地发送电子邮件或我个人的电话。

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

立即注册按钮

翻译自: https://www.javacodegeeks.com/2016/10/single-sign-java-20-minutes-spring-boot-heroku.html

java heroku

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

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

相关文章

如何使用SSH客户端远程操作linux系统,并启动、关闭tomcat和查看后台日志

cd … 表示回退到上一级目录 ls 表示查看当前目录下的所有文件 我们的tomcat安装路径在usr\local\yzmis\下面找 例如你要关闭信誉质量考核系统所在的tomcat&#xff0c;你要进入test下去找到apache-tomcat-6.0.14 再进入bin目录下&#xff0c;然后执行[trserver100 bin]$ ./sh…

极光推送android点击跳转页面,app关闭时点击推送消息实现页面跳转

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {//推送注册var str:NSString UIDevice.currentDevice().systemVersionvar version:Float str.floatValueif version > 8.0 {APService…

模块pdf2image.dll加载失败_Webpack 原理从前端模块化开始

当前主流 JS 模块化方案无模块化CommonJS 规范&#xff0c;nodejs 实现的规范AMD 规范&#xff0c;requirejs 实现的规范CMD 规范&#xff0c;seajs 实现的规范&#xff0c; seajs 与 requirejs 实现原理有很多相似的地方 u ES Modules&#xff0c;当前 js 标准模块化方案注意:…

drools dmn_Drools 7支持DMN(决策模型和表示法)

drools dmn决策模型和表示法&#xff08;DMN&#xff09;规范是OMG&#xff08;对象管理组&#xff09;相对较新的标准&#xff0c;旨在为业务规则和业务决策提供服务。 BPMN&#xff08;它的兄弟规范&#xff09;用于业务流程&#xff1a;标准化表示法和执行语义&#xff0c;…

ios html正则表达式,ios 正则表达式去html标签

ios 正则表达式去html标签[2021-01-27 12:53:55] 简介:php正则表达式去掉html的方法&#xff1a;首先使用“htmlspecialchars_decode” 将特殊的HTML实体转换回普通字符&#xff1b;然后通过正则表达式“preg_replace(/]>/,,$_st系统运维正则表达式概述基础正则表达式扩展正…

PL/SQL工具执行SQL脚本文件

方法一&#xff1a;在命令窗口中输入SQL>E:\prestigereport.sql 方法二&#xff1a;工具菜单下的【导入表】&#xff0c;选择SQL插入后选中需要导入的sql脚本文件。

java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事

java开发五年面试经验深入研究Java之前需要了解的所有内容的概述 有许多工具&#xff0c;方法&#xff0c;环境和功能会改变您处理代码的方式&#xff0c;而这些通常是在学年期间不会遇到的。 虽然它在Java开发世界中迈出了第一步&#xff0c;但大多数实际学习都是在工作中进行…

python合并excel工作簿_Python合并多个Excel工作簿

# -*- coding: utf-8 -*- #导入需要使用的包 import xlrd #读取Excel文件的包 import xlsxwriter #将文件写入Excel的包 #打开一个excel文件 def open_xls(file): f xlrd.open_workbook(file) return f #获取excel中所有的sheet表 def getsheet(f): return f.sheets() #获取sh…

中间表、关系表、关联表

中间表关系表关联表&#xff0c;保存表与表之间的记录&#xff08;数据&#xff09;对应关系&#xff0c;表保存的基本上是ID值&#xff0c;如果还保存其它的数据就不能认为是关系表&#xff0c;而且也无法真正体现数据记录之间的对应关系。

neo4j 两个点创建关系_Neo4j:找到两个纬度/经度之间的中间点

neo4j 两个点创建关系昨天我写了一篇博客文章&#xff0c;展示了如何使用Cypher查找两个纬度/经度之间的中点&#xff0c;这是第一次尝试填补缺失位置时的效果&#xff0c;但是我意识到我可以做得更好。 正如我在上一篇文章中提到的&#xff0c;当我找到一个缺少经纬度坐标的停…

c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)

编者按优化求解器对于做运筹学应用的学生来说&#xff0c;意义重大。然而直到今天&#xff0c;放眼望去&#xff0c;全网&#xff08;包括墙外&#xff09;几乎没有一个系统的Cplex中文求解器教程。作为华人运筹学的最大的社区&#xff0c;『运筹OR帷幄』 责无旁贷&#xff0c;…

常用 ORACLE 函数的解读

文章目录substr()&#xff0c;截取源字符串中的字符串rtrim()&#xff0c;将源字符串右边指定的字符删除ltrim()&#xff0c;将源字符串左边指定的字符删除instr()&#xff0c;返回指定字符串在源字符串中的检索位置decode()&#xff0c;条件判断函数rpad()&#xff0c;从右边对…

markdown 行内公式_如何轻松将笔记转为思维导图(Word、Markdown)

目录简介Markdown -> XMindWord -> XMind简介思维导图是一种一种图像式思维的工具&#xff0c;便于我们理解知识之间的逻辑关系。在我们的学习、生活中&#xff0c;我们习惯于使用word、markdown等笔记软件&#xff0c;而较少的使用思维导图。其实&#xff0c;有些时候我…

apache.camel_Apache Camel 2.18发布–包含内容

apache.camel本周发布了Apache Camel 2.18.0 。 此版本是重要版本&#xff0c;我将在此博客文章中重点介绍。 Java 8 Camel 2.18是第一个需要Java 1.8的版本&#xff08;例如&#xff0c;容易记住的Camel 2.18 Java1.8。Camel2.17 Java 1.7&#xff09;。 我们采取了谨慎的…

html文件上传删除,文件上传以及删除文件方法

文件上传公共方法1.[代码][Java]代码import java.io.File;import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.multipart.MultipartFile;/*** 文件上传公共方法** a…

tomcat服务器通过配置来部署程序

打开 tomcat 的 conf 目录下 server.xml 文件&#xff08;例如&#xff1a;E:\apache-tomcat-6.0.14\conf\server.xml&#xff09;&#xff0c;找到 <Host> 标签&#xff0c;在 <Host> 标签体中找到 <Context> 标签&#xff08;如果没有自己创建&#xff09;…

cors跨域_Spring Boot 中通过 CORS 解决跨域问题

(给ImportNew加星标&#xff0c;提高Java技能)转自&#xff1a;江南一点雨今天和小伙伴们来聊一聊通过CORS解决跨域问题。同源策略很多人对跨域有一种误解&#xff0c;以为这是前端的事&#xff0c;和后端没关系&#xff0c;其实不是这样的&#xff0c;说到跨域&#xff0c;就不…

逻辑建模与物理建模_架构层和建模域逻辑

逻辑建模与物理建模在讨论用于建模域逻辑&#xff08;例如事务脚本&#xff0c;表模块&#xff0c;域模型&#xff09;的PoEAA模式时&#xff0c;我注意到人们对域模型模式是最好的印象&#xff08;尽管印象不对&#xff09;。 因此&#xff0c;他们开始将其应用于所有内容。 …

Oracle10g 创建表空间/用户

文章目录如何创建表空间创建数据库创建用户的具体过程关于表空间的其它命令语句如何创建表空间 1、为什么要创建表空间&#xff1f; 答&#xff1a;在建立用户的时候&#xff0c;我们建议数据库管理员要指定用户的默认表空间。因为我们在使用 Create 语句创建数据库对象&…