使用JWT的Cloud Native应用程序

机云应用程序是为云计算环境开发的应用程序。

对于“ 什么是云原生应用程序 ”这个问题没有具体答案,但是必须满足不同的概念。

在我看来,最重要的功能之一就是能够快速缩放 。 这意味着我们的应用程序在每台服务器上都无法具有任何状态,因为如果一台服务器宕机或规模缩小,那么存储在该服务器中的状态将丢失。

https://www.youtube.com/watch?v=osz-MT3AxqA对此进行了很好的总结,并以购物车示例进行了说明。 在整体方法中,您将购物车的产品存储在服务器会话中,如果服务器出现故障,则购物车的所有产品也会丢失。 在云原生应用程序中 ,可以快速扩展和缩减服务器实例,重要的是不要在服务上具有这种有状态的行为,而应将它们设计为无状态。

有多种方法可以实现实现无状态体系结构的目标,但可以将它们概括为两类:

  • 使用分布式内存键/值数据存储,例如Infinispan。
  • 使用令牌,该令牌用作客户端和服务器之间的会话 ,例如使用JWT

在本文中,我将向您介绍后面的方法。

从https://jwt.io/introduction/网站:

JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。

由于此信息是经过数字签名的,因此可以被验证和信任。 可以通过使用HMAC的机密或使用RSA的公/私钥对对JWT进行签名。

JSON Web令牌包含三个由点分隔的Base64Url字符串,它们是:Header.Payload.Signature

因此,使用JWT在后端实现无状态架构的基本思想是下一个:

  1. 当用户添加第一个产品时,后端服务将生成一个添加了产品的新JWT令牌,并将其发送回前端。
  2. 当用户添加新产品时,它将发送要添加的产品以及后端发送的JWT令牌。
  3. 然后,后端验证令牌是否尚未修改(验证签名),然后从先前添加的JWT有效负载中获取产品,并将新的产品添加到列表中。 最后,它使用以前的产品和新产品创建一个新令牌,并将其发送回前端。
  4. 始终重复相同的过程。

如您所见,现在无需维护任何状态或在后端添加任何新的数据库服务,您只需要发送和转发JWT令牌以及内部产品。

我录制了一个简单购物车示例的视频,其中演示了该解决方案的无状态本质。 可以在以下位置看到:

另外,如果您想检查我用于录制的项目,可以查看https://github.com/lordofthejars/shop-jwt 。

注意,这只是一个简单的文章,因此您可以了解基本思想。 但是您需要考虑在生产中使用它的下一步操作:

  1. 使用HTTPS代替HTTP
  2. JWT只是对令牌进行签名,如果您除了HTTPS之外还需要其他保护,请使用JWE来加密JWT令牌的有效负载。
  3. 对令牌进行指纹识别,以避免任何中间人攻击,并将这些参数用作令牌的身份验证参数。
  4. JWT也可以用于传递身份验证和授权内容。

您可以在JavaZone上观看我的演讲,其中介绍了其中一些技巧:

使您的REST服务免受攻击– Vimeo上 JavaZone的 Alex Soto Bueno

JWT方法的优点在于,它极大地简化了服务的部署,您无需部署或配置任何其他分布式数据库即可在整个群集中共享内容,从而将与网络通信所需的问题最小化分布式数据库或任何节点的配置错误。

缺点是客户端需要知道接收和发送回令牌并进行处理。 在后端,您需要一直签名并验证每个令牌。

翻译自: https://www.javacodegeeks.com/2018/01/cloud-native-applications-jwt.html

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

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

相关文章

stackexchange_通过Spring Social发推StackExchange问​​题

stackexchange1.简介 这是有关小型辅助项目的第三篇也是最后一篇文章-该机器人自动在专用帐户上发布来自各个Q&A StackExchange网站上的问题的推文(文章末尾的完整列表)。 第一篇文章讨论了为StackExchange REST API构建简单的客户端 。 在第…

使用JCache缓存方法结果

在JCache中,有一个方便的功能可以透明地缓存方法的结果。 您可以使用CacheResult注释托管bean的方法,并且将再次返回第一次调用的结果,而无需再次调用实际方法。 import javax.cache.annotation.CacheResult; // ...public class Calculator…

开源项目GoodView点赞效果

点赞1效果: GoodView方法: 使用GoodView的Demo: public class MainActivity extends Activity { Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main)final Good…

开源RefreshListView下拉刷新效果

1、AnimationDrawable java.lang.Object ↳android.graphics.drawable.Drawable ↳android.graphics.drawable.DrawableContainer ↳android.graphics.drawable.AnimationDrawable 文档概述:An object used to create frame-by-frame animations, defined …

Neo4j:遍历查询超时

在过去的几周中,我一直在花一些业余时间来创建一个应用程序,该应用程序从Open Roads数据生成运行路线-当然已转换并导入到Neo4j中! 我创建了一个用户定义的过程,该过程结合了几个最短路径查询,但是如果它们花费的时间…

View的三大流程之View的测量

1、public class View extends Objectimplements Drawable.Callback KeyEvent.Callback AccessibilityEventSourcejava.lang.Object ↳android.view.View Class Overview This class represents the basic building block for user interface components. A View occupies a …

使用LayoutParams设置布局

1、public static class ViewGroup.LayoutParams extends Objectjava.lang.Object ↳android.view.ViewGroup.LayoutParams Class Overview LayoutParams are used by views to tell their parents how they want to be laid out. LayoutParams是ViewGroup的一个内部类, 每个…

记录意外的开关选项

Java开发人员可以做很多事情来使自己的生活以及维护该代码的其他人的生活更加轻松。 在本文中,我将探讨开发人员可以采用的一种非常简单的方法,以使每个人都更轻松。 这篇文章的要点对于每个阅读它的人来说似乎都是显而易见的,但是我发现这样…

View的绘制

1、当测量好一个View后就可以重写onDraw()方法,并在Canvas对象上绘制所需的图形。 public class Canvas extends Objectjava.lang.Object ↳android.graphics.Canvas Public ConstructorsCanvas()Construct an empty raster canvas.Canvas(Bitmap bitmap)Construc…

ViewGroup的测量及绘制

1、ViewGroup的测量public abstract class ViewGroup extends Viewimplements ViewManager ViewParent java.lang.Object ↳android.view.View ↳android.view.ViewGroup Class Overview A ViewGroup is a special view that can contain other views (called children.)…

ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)

ejb 2.0 3.0这篇文章将讨论使用批注定义EJB视图的可能方法(最后我将只提到使用EJB部署描述符)。我将重点介绍最新的EJB 3.1视图,这些视图将省略旧的本地,远程和本地接口。 因此,我们可以选择: 远程业务界面…

View的事件分发机制简述

要分析的对象就是MotionEvent,点击事件的事件分发其实就是对MotionEvent事件的分发过程,当MotionEvent产生后,系统需要把这个事件传递给一个具体的View,这个传递过程就是分发过程。这个过程由三个很重要的方法共同完成&#xff1a…

ListView的使用用ViewHolder提升效率

public class ListView extends AbsListViewjava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.AdapterView<T extends android.widget.Adapter> ↳android.widget.AbsListView ↳android.widget.ListView Class Ove…

通过投影增强数据模型

介绍 数据模型可能很棘手。 建模可能会更加困难。 有时候&#xff0c;应该放入数据库表中的信息不一定是我们要在每段代码中使用的信息。 和其他许多次一样&#xff0c;Spring来了。 一个称为投影的小功能可以帮助我们在普通界面中仅用几行数据映射数据。 在本文中&#xff0…

ListView常用属性、方法

1、设置item间分割线&#xff0c;分割线高度 android:divider"android:color/darker_gray" android:dividerHeight"10dp" 分割线不仅仅可以设置为一个颜色&#xff0c;也可以设置为一个图片资源。 分割线设置为透明&#xff1a; android:divider"…

具有弹性效果的ListView

Android默认的ListView在滚动到顶端或底端&#xff0c;没有很好的提示&#xff0c;下面通过源码来实现弹性效果。 ListView中有一个控制滑动到边缘的处理方法&#xff1a; protected boolean overScrollBy(int deltaX, int deltaY,int scrollX, int scrollY,int scrollRangeX,…

rememberme多久_使用Spring Security添加RememberMe身份验证

rememberme多久我在“ 向Jiwhiz博客添加社交登录”一文中提到&#xff0c;RememberMe功能不适用于Spring Social Security。 好吧&#xff0c;这是因为该应用程序现在不通过用户名和密码对用户进行身份验证&#xff0c;并且完全依靠社交网站&#xff08;例如Google&#xff0c;…

Java 9:对可选的增强

之前 &#xff0c;我写过Java 8中引入的Optional类&#xff0c;该类用于对可能不存在的值进行建模并减少可能引发NullPointerException的位置的数量。 Java 9向Optional添加了三个新方法&#xff1a; 1. ifPresentOrElse 新ifPresentOrElse方法允许你执行一个动作&#xff0c…

电脑还原Mac地址

之前修改过电脑Mac&#xff0c;现在与手机Mac冲突&#xff0c;导致手机无法连接校园网。 控制面板——》打开网络和共享中心——》选择更改适配器设置 本地连接——》右键选择属性 上图选择配置 高级——》在下拉菜单中选择网络地址——》右边选为“不存在” 之后本地连接会自…

聊天ListView使用ViewHolder

聊天界面会展示至少两种布局&#xff0c;即收到消息和发送消息。这样一个ListView与平时使用的ListView的最大不同&#xff0c;在于它有两个不同的布局&#xff1a;收到的布局和发送的布局。需要利用Adapter实现这样的效果。即需要在获取布局的时候判断该获取哪个布局。 public…