00:00
接下来我们再来处理登录服务器需要做的功能,首先呢,我们前边我们当来访问CLIENT1我们的这们道ES以后,我们只要判断没登录就会跳到登录服务器,并且呢告诉登录服务器你成功以后呢,要重定向到我的这个地址,所以呢,接下来登录服务器就要处理登录功能,来登录服务器呢展示它的这个登录页,而且呢我们按照账号密码,我们一登录以后要跳回去,那为了能跳回去,我们将登录页的这一块,因为我们在访问登录页的时候能取到UR的地址,但是如果我们再来执行一个登录,我们上边的地址就会丢了,所以呢,我们为了防止这个地址丢失,我们可以在登录页,登录页的位置,我们除了账号密码外,我们再来带一个隐藏的input框,比如tap就叫黑,这个隐藏的input框,Name呢就叫URL,这个URL呢,让它自己取出我们之前的登录地址就行了,这来到登录页,由于这个地址。
01:00
只呢是一个redirect URL相当于我们这个参数,这个参数呢,我们可以直接在页面这一块Dollar福大括号取参数,当然你也可以将我们登录页,因为我们这个登录页访问还要过一个ctrler ctrler拿到这个数据你再放到请求域中取,都是一样的,诶两个一模一样的。好,我们就来写一个model,我们就放在请求句中吧,这个model,比如呢,Model点一个and attribute,我们就叫URL,这个呢,我们给页面呢放一个URLURL的值,那就是我们刚来这个login页面,我们重电下页面带来的这个值,所以呢,放到这儿,那来到login页面我们就能do了,F大括号取出这个UR值了,好,我们来加上SIM live的名称空间THY,那么SIM live的名称空间我来写一个THY6THY,六那THY6那就是Dollar大括号,Dollar大括号因为我们给model里边放了一个URL,那么就直接诶。
02:00
取出ul,然后呢,我们这个登录页就能在隐藏域中展示这个URL,我们再来处理登录请求的时候,好处理登录的时候我们不只能收到账号密码,你看这个登录页除了提交账号username,还提交我们这个密码,密码的这个password还会提交一个隐藏的参数,就是URL,就是登录成功以后呢,去哪相当于页面会提交这么三个参数。好,我们现在先来重启一下我们这两个服务器s so server,那我们来到我们的这个服务器,服务器呢,现在就要处理登录请求,好,我们来到服务器,来加上服务器,接下来就要进行第五步处理登录请求,好,首先来展示登录页,展示登录页。因为浏览器呢,现在要访问登录页,那我们就给它展示登录页,展示登录页的时候呢,顺便我们将重定向下一次要去的地址,我们也悄悄的放在了登录页,好我们来展示这个登录页,浏览器呢,现在就看到了登录页,好我们画的呢非常详细。六浏览器浏览器看到浏览器。
03:09
展示咱们这个登录页,那展示到登录页以后呢,接下来用户就需要在这个登录页输入他的账号密码,所以呢,我们这个用户接下来在这个登登录页来输入账号密码来进行登录,好第七步输入账号密码,输入账号密码进行登录。好,我们现在呢,就是这样,那我们现在展示来了这个登录页,我们就要在这儿输入账号密码进行登录,而且我们登录页呢,现在也有了重提向地址,那现这两个服务呢,我们都重启了,重启我们现在重新再来走一遍,好,我们还是访问employees这个请求来回车没登录跳到登录页,然后呢,登录页我们把这个UR地址我们也悄悄放进去了,检查好我们这个URL能取到没问题,所以呢,接下来我们来提交登录请求,只要我们输了账号密码,我们来提交登录好账号呢,我来输,随便输一个,只要账号密码不为空,我们都认为登录成功,所以呢,我们在这儿登录请求这一块,我们就来处理一下if,如果它的string YouTubes点一个its empty,只要这两个它不为空,并且这个密码呢也不为空,就认为登录成功,我们现在不做那么复杂的,还去数据库来查好,只要账号密码不为空,我们就认为。
04:30
为登录成功,登录成功,所以呢,登录成功我们要跳回哪?诶我们其实要跳回这,所以登录成功我们return,我们要跳到的一个地址,跳到一个地址,我们写上readdirect,我们要重定向到哪一块呢?就是我们带的这个URL,这个UR,就是我们上一个服务器跳过来的这个地方,诶我们通过页面传递又传了回来,那如果登录失败,自然呢,还是来展示我们的这个登录页就行了,所以呢,我们继续给它渲染我们的这个登录页登录失败,失败咱们这个展示登录页,登录页登录成功,跳回之前页,跳回之前页面,好,我们大概的框架逻辑就是这样的,我先来重新启动一下,那么现在呢,看到这一步,那就是。
05:25
我们输入了账号密码进行登录,那么账号密码输完以后,我们就会提交登录请求给我们的登录服务器,所以我们接下来在这儿来再来画一个逻器,我们相当于提交一个do log请求,好,我们提交登录请求。提交登录请求,因为我们都填写的是表单,所以登录请求的表单地址,其实它的完整地址呢,我们来写上,就是我们的https so server。点一个com冒号,我们现在是8080下边的我们有一个请求叫do log,这还是posts的请求,所以呢,我们来提交登录请求,提交的时候呢,我们会带上很多参数,有username,还有password,还有我们的URL地址redirect,相当于我们之前的要重叠下去的URL地址,那这个UR地址呢,我们只要带上好,我们在这一块呢,处理登录请求。
06:24
好,我们接下来登录服务器要做的事情,那就是处理登录请求,把这个拿来画在这。那么登录服务器呢,现在来第九步来处理登录请求,好把这个第九步,第九步我们来处理登录请求,处理登录请求,所以呢,我们这个登录请求只要处理登录成功,我们就要跳回这个页面,我们现在呢,重启了,我们现在来重新测试一下,好,我们还是访问employees,由于呢它没登录,所以呢现在要进行登录,我们是8081,好,我们把这个页面关掉,来访问这说ES的8081走,由于没登录,跳到登录,我们随便提交一个账号密码,因为提交的时候呢,还带了隐藏的UR地址,所以我只要一登录,那登录成功就要跳回到我们这个地址,那么这一块呢,判断没有生效,我们来看一下登录成功。
07:20
如果说我们提交的username和password不是空,我们就要跳过去,那么这一块呢,相当于提交的是一个空的,我们login页面是一个post请求,提交了username和password,确定没什么问题,好我们就来让他取下at request per,请求参数里边给我们来取出userna,这是第一个,第二个请求参数里边再给我们来取一个password,然后呢,再来说请求参数里边我们来取出UR地址,好我们来重新启动一下我们的s so server,那现在我们要做的就是先来访问CLIENT1受保护的资源,好我们来回车,现在没有登录,给我们跳转到登录页,跳转登录页我们是来输入账号密码,现在都不为空。
08:07
来这个name user在name没问题,Password也没问题,我们现在来提交我们的账号密码来点登录,现在还返回这个登录页,那这个登录页那说明我们这个是if判断不成功,来打个断点看一下哪一块不成功,诶debug模式好,我们现在来执行do loggan请求表单呢,提交到杜logon,好,我们现在先来刷新,我们现在是来访问这个地址,来输入账号密码,好当我来点击登录,我们来到我们的这一块,我们看到user nameme呢是没问题的,Password也是没问题的,好,我们来放行,那就要跳回之前的页面,好,那相当于跳了走,那跳了以后呢,我们发现它又回来了,回来的原因很明显了,我们来看我们执行do log跟请求执行成功了,然后呢,我们命令浏览器要重定向到C1,所以我们把这个流程丰富一下,处理登录请求,那登录成功,我们接下来命令浏览器,我们给浏览器呢。
09:07
返回一个响应,这是我们的第十步,好,我们第十步,第十步呢,那就是登录成功,来返回,返回,返回我们指定的页面,我们也能看到整个请求的流程,Do log只要成功了,然后呢,接下来它就命令我们response跳转到CLIENT1,诶那相当于是我们之前的页面返回登录成功,跳转命令,我们这个返回命令重定向,从定向到我们这个页面,那这个页面呢,其实是我们第一次访问client client1要访问的这个资源,好,那我们就命令他访问,那这个访问呢,接下来又要遵循我们这个逻辑,那访问这个C1的时候,要看我们有没有登录,因为C1呢总是没登录。所以呢,我们这一块总是判断不通过,相当他又重定向回来了,虽然它重定向了可兰一,但是可兰一说哎,没登录,再来到SO42,所以这成了一个死循环了,除非有一件事情,就是我们这一次跳转回去以后,我们的CLIENT1能知道我们跳回它的employees以后,他呢,能知道我们这一次是登录成功后跳回来的,所以们CLIENT1就要具备一个能力,就是呢,感知这次是在是在是在哪里呢?是在我们这个s so server s so server登录成功,登录成功跳回来的。
10:36
而不是我们直接访问的。所以我们核心流程呢,就在这儿了,要想下一次呢,能直接访问我们重定向跳回到我们的之前的资源,我之前资源要能感知我们是在这登录成功的,那这一块该怎么写,我们来想一下,现在呢,问题就是我们现在C1不能知道我们是跳回来的,怎么让他知道我们在这稍加处理,比如我们这个login controlrler,那我们这个login controller呢,我们现在登录成功,登录成功我们以前都希望把成功的用户放在session里边,那现在呢,假设我们放到red里边,假设无论放在哪都行,反正就是把登录成功的用户保存起来,把登录成功的用户存起来,存起来我们用绘画呢标识起来,比如我们存在session里边,或者呢,我们来使用red,好,假设,我们就来引入最简单的RA来存储好dependency。我们使用data RA。
11:39
Start data red,那么这个red呢,引过来,然后呢,我们来配一下red的地址,Red点一个host,我们是192.16 8.56.10,好,现在呢,我们只要登录成功,我们把登录成功的用户存到red,那red呢,我们操作就是使用string red tablet,所有都是自动配置好的,我们直接拿来用at一个autowa,好,Red tablet们就来存一个,用户来存的时候大家注意,现在最关键的问题就来了,我们存简单ready点一个options for value点一个,我们来set,我们存一个KVK,是什么,V是什么?那这个K呢,如果我们是用session存,我们就要发一个卡,类似于银行卡的卡号,我们用red存。
12:25
那么K呢,每一个保存的用户,因为red里边会存好多登录的用户,所以我们要为每一个用户生成一个唯一的K,那么就可以来使用UUID,所以呢,我来string string一个啊,我们就叫UUID等于。我们使用UUID,我们来整一个random u ID to string,好,我们来给它repl,并且来替换一下,我们把它UID中间的这个短横杠们来给它替换掉,好,然后呢,我们得到的这个我们就放在red里边,值是什么呢?我们把当前用户信息存起来,好,我现在为了简单就存一个用户名,那把登录成功的用户存起来,但我们得让别人知道我们这个用户登录成功了,那怎么办呢?所以大家注意,我们给这一块返回重定向URL的时候,好,我再来加上一个参数,就是问号,我告诉你,告诉你什么,我呢还给你存了一个用户,比如我们就叫ton吧,就叫令牌,这个用户的令牌呢是他,所以呢,只要跳回到我们原地址,但跳回到原地址跟直接访问,直接访问是没令牌的,跳回原地址是有令牌的,那有令牌我就认为你是从那儿成功跳。
13:41
未来的,所以呢,我们现在引入这么一个思想,那么简单,先来试一下看行不行,好,我们现在来重新来启动s so server,走,只要s so server登录成功,它呢跳回到我们之前的地方,就会带一个token令牌,来看一下这一块对不对,所以呢,这一块处理登录请求,登录成功,我们将用户保存在red,登录成功,登录成功,然后呢,保存用户。
14:07
登录状态,登录状态信息到red,我们现在呢是保存到了red,而且呢,把这个令牌我们也返回出去,同时要返回令牌,所以呢,我们在这儿,哎,同时令牌返回出去,我们当时存用户的时候,用的是哪个K唯一的这个标识,我们给返回出去是怎么返回的,相当于我们命令他重定向的时候,给这一块呢,又加了一个地址,好,我们这个重定项,我们来加了一个问号参数,这个参数呢就叫token token的值等于我们这个令牌。比如UUID。它呢就是一串硬牌,我们来随便写一串,所以呢,我们现在呢,跳转就是这样跳转的,我们来看对不对,我现在来重新来访问employees,好,我来访问employees回撤,我们现在没有登录好,第一个请求没登录访问到这,然后呢,我们来给他登录走登录。
15:09
登录呢,由于我们没有做其他处理,但是我们现在能看到do logn,只要我们一登录成功以后,我们虽然命令浏览器重立项,但是给他带了一个token token是这个UID,所以呢,我们下一步浏览器访问employee的时候带了一个token,所以只要带了这个token,我们就应该认为它是已经登录了的,所以我们在这一块稍微再来改一下,我们来到客户端的这个代码里边,那客户端的这个代码,只要你返回这个请求,你返回的这个请求带了这个token参数,好,我们来写一个string token。这个token呢,会在参数位置一个request per,而且这个token是不一定带的,因为我们默认第一次访问我们就是这么访问的,没带,只有我们去登录服务器,登录回来了以后,我们才会带上这个token,所以呢,这个token大家注意我们来写,他想要获取我们这个参数token的值,但是呢,Require是false,诶,我们是不是必须参数,诶大家注意这个token。
16:14
看palm描述一下我们的这个token,那么这个token呢,就是只要去s so server登录成功了,我们就会带过来,登录成功跳回来我们就会带上,跳回来就会带上,就会带上,所以我们相当于有这么一个标识,那登录成不成功,我相当于得有两个判断,第一个默认呢,在session里边看它成不成功,然后第二个只要呢,我们上一次是跳回来的,带了token,我们就来判断if,如果说string us,点一个is empty token,只要这个token不是空的,那token不是空,说明人家是从那边跳回来的,所以呢,我们这个就认为这是去他这一块跳回来带上的,那么就认为他是登陆成功了,那登录成功就应该给人家返回这个成功页,所以这个登录成功怎么做呢?我们一般成功了以后,我们就会把成功的用户放在session里边,所以我们把这个登录。
17:15
功的用户,我们再来放在session里边set atribute,但是问题现在又来了,我们set atribute叫login user直放什么?因为我们服务端给我们登录成功以后,它是使用这个UUID,这个token,然后呢,把用户存到了red里边,而且假设这个服务端不是用Java写的,他的red我们也不知道地址,他指了给了我们一个令牌,所以呢,我们虽然能拿到令牌,我们想要知道到底是哪个用户们还得去去我们这个SSO服务器获取当前token真正对应的用户信息,真正对应的用户信息,那只有我们获取到用户信息了,我们才能认为是成功的。但是呢,这一次呢,我们先来写一个to动,我们先不做这么复杂,我们先把这一块的流程打通,我们假设呢,给里边随便放一个,比如我们就叫张三,那只要登录成功了,我们。
18:15
那就放到session里边,你判断session里边有那就过来,没有那就算了,所以我现在来启动这一块的流程,大家看现在是怎么样的,那现在呢是这样子的,我们来完整的流程,我们第一次访问employees没登录session里边没有让重定向去登录页,好,我们展示这个登录页,给它返回这个登录页,我们账号密码一输,我们跳去登录,只要登录成功,我们服务端会将用户存起来,我们来看这个logn ctrl存起来,存起来了以后呢,给你一个令牌,然后呢,我们令牌呢又跳转回你的这个页面,你的这个页面只要一收到这个令牌,然后呢,接下来你就要做事了,所以我们这个跳转回这,因为这个命令呢是发给浏览器的,所以浏览器呢相当于。去来访问我们这个地址,好来写上浏览器呢,第11步,真正访问我们这个一好,这是第11步浏览器访问是访问的这一块的全地址。
19:11
浏览器跳到这儿,我们就叫浏览器跳转到我们这个地方,那浏览器跳转到这个地方,但是跳到我们CLIENT1这块服务了,这块服务呢,我们刚才写了一段代码,那就是我们来判断,只要带了token,那跳到这以后呢,相当于又是去访问门employees,所以相当于又回到第一步,那回到第一步呢,我们就应该判断是否登录,是否有当前这个绘画,当然这个判断登录呢,我们是这么判断的。那怎么算是登录,哎,如果如果有token,如果参数有token。如果参数有token,然后呢认为是登录的,这是第一个,然后呢,第二个或者说我们第一个来写上一,那或者说如果我们这个session里边有用户,那也是登录的,二那就是session里边有也是登录的,而且呢,关键这个一就是呢有token,我们就会查到用户放到session中,查到用户放在session中。
20:24
所以呢,既然我们放到session中了,其实我们判断登不登录,还是判断session中有没有,所以这是我们的第二步,我们放到这儿,那我们现在呢,只要我们这一块登录成功,跳回来带了token来,我们假设呢,已经去服务器按照这个token查到这个用户了,我们放到session中了,来看一下完整流程,所以呢,这一步浏览器一旦跳转到这儿,那么这一块呢,相当于就是回到步骤一,回到步骤一,那么这个步骤一呢,那就是又去来判断成不成功怎么样,因为我们访问的都是employees,因为我们访问的都是这个employees,好,我们现在来看一下这个流程,那么之前呢,把这两个已经都启动了,我们来做一个测试,我来访问这个employees,走,然后呢,没有登录,我来写一个登录走,我点击登录。
21:15
那登录以后呢,我们跳回去会带上token,当token以后呢,我们会把这个token信息保存到session里边,那下一次我们再来访问employees来看一下走,诶我们发现呢,就不用登录了,不用登录的原因就是由于我们这个跳回去以后,我们跳回去以后呢,带了这个token,有token以后呢,我们会查来用户放到session中,所以呢,我们只要是访问这个CLIENT1这个系统与我们呢已经有这个session了,就是这个解session ID来给大家看一下,我们现在呢,相当于有我们这个session解session ID这个需学里,这是我们之前的把这个删删掉,我们这个session里边呢,已经有用户了,所以我们是登录成功的,无需访问的,那么这块呢,就做了一个简单处理,但现在最大的问题就是,如果我们访问C2还是我们这个域名,假设呢,我们C2那是8082,我们还来启动一个服务,但我还是使用八零八一来启动,因为我们这个同一个。
22:16
C我来启动两个用不同的端口,我就来模拟两个客户端,但是他们的域名不同,域名不同,所以之前c client1的这个解session,它的session他登录了,但不代表我们第二个域名登录了,但是我们现在第二个域名要登录的话,我们就应该是访问第二个域名是直接可以访问的,而不是在这样又跳回来要让我们登录的,所以我们现在呢,这个流程还没做完。那么虽然。一能访问了,我们有这个token了,但我们得想办法来访问C2的时候,我们C2由于我们C1已经登录了,我们是单点登录流程,所以一处登录了,我们应该处处都让它登录成功,那下一节课我们来看这一块逻辑该怎么做。
我来说两句