00:01
各位大家好,欢迎继续收看上硅谷视频课程,我们继续来学习security,那下面呢,咱来完成一个具体功能,通过spring security里边的一种机制来做一个效果,什么效果呢?就是基于数据库实现记住我,或者说叫自动登录,比如说我们之前我们要访问某个方法或者某个CTRL的时候,首先我们是不是要认证了,就是你登录登录之后认证通过是不是能访问啊,比如说咱们登录认证通过之后,这里边访之后我怎么做呢?我想实现把浏览器关掉,然后再打开这里边的路径还可以访问,因为咱们已经认证过了,它就不需要再次认证,这个就叫做基于数据库实现自动登录,或者说记住我。而这种效果呢,我们在实际中各位应该都见过,给各位举个例子啊,比如说我们现在。
01:00
咱们随便访问这么一个网站,因为目前大部分网站中应该都有类似功能,比如说打开这个163这个邮箱,打开一下,然后大家看啊,在登录页面中有这个地方。各位看到叫十天内免登录,比如说我们现在选择了这个复选框,我输用密码一登录,当我点之后,我这里边我关浏览器,我下次再进入邮箱,咱是不需要登录了,它是不是能实现自动登录,所以我们下面就实现出类似于这么一个效果,咱看他该怎么去做,而这个效果我觉得各位同学应该知道他该怎么实现,因为咱们在web阶段,这个自动登录应该学过一个技术。不知各位是否记得,你说我们可以用什么技术实现,大家可以考虑一下用什么技术。各位注意,是不是这个技术叫cookie吗?Cookie是不是就能做到一个自动登录的这么一个过程,用cookie我们现在可以实现,但是cookie啊,它本身有个缺点,在web阶段各位应该也知道,Cookie是一个客户端技术,它的内容要存到咱的浏览器中,如果你的内容中有一些就是涉密,比如说你的密码等等信息,一些敏感信息,咱肯定不建议这么来做,所以现在我们就使用spring security里边就是这个安全框架中的一种机制来实现这个自动登录,因为在spring security这个安全框架中,它把这过程大部分已经帮我们做了一个封装,咱用它把这过程可以做一个实现,那我们下面基于这个框架实现出一个自动登录,或者说叫基于数据库实现,记住我,那咱们看这个该怎么去做,给各位把这个案例。
02:54
题咱做了一个分析,就是咱要做成什么效果,那下面首先呢给各位先介绍一下。
03:01
这个自动登录在我们spring security里边,它的一个最基本的一个实现原理,就是它的底层是怎么给咱们封装的,把原理给各位先讲一下,讲完原理之后,咱再用代码做一个实验,就首先我先说它的原理,那这原理怎么样,给各位我先画一张简图,然后我这里边呢有一张比较详细的图,咱最后再来做一个更详细分析,我先说一个总体的一个概述,就是它是怎么实现的。给各位强调啊。比如说现在我们在访问过程中,里边涉及到几部分,比如说这一部分我们代表一个浏览器。我画一下啊,这是一个浏览器。然后比如说这部分我们是一个什么呢?就是咱们那个数据库。数据库,而我们在操作中,按照这种security,它的原理是怎么样的呢?给各位说一下,它主要用到两部分,一部分是cookie,一部分是存数据库,比如我现在我这里边做了一个认证啊,假如咱们在这个位置,我们做这个认证,并且认证已经成功了。
04:17
就是认证。成功,然后认证成功之后,他会怎么做呢?它会向两个地方存数据。第一个地方就是浏览器,在浏览器中呢,它是通过cookie这个技术。Cookie向浏览器中存这么一段,就是加密的这么一个字符串,或者一个加密的这么一个串,往里边存这数据,这数据进行加密,然后他存之后还要向数据库中存储数据,数据库中存什么呢?首先第一部分是你cookie中这个加密串。这个要存进去,另外还要存入你那个用户的信息的这么一个字符串,比如用户名、密码等等信息进行存储,就存一个你的cookie加密串,跟用户信息的这么一个对应关系,他会做这么一个存储,所以首先第一部分做这个事情,当你认证成功之后,他会做这么一个事情。
05:16
然后这个做完之后,下面怎么做呢?比如说我们第二部分。我们就是再次进行访问,比如你关浏览器,然后再访问,那他会怎么做呢?给各位强调,因为咱的cookie,咱知道cookie是不是能设置它的有效时长啊,假如设置COOKIE7天内十天内一直有效,那怎么做,他再次访问会首先获取到你的。Cookie信息,然后拿着这个cookie那个信息到数据库里边进行这么一个叫比对,因为咱说到数据库存的是cookie加密串和用户信息对应关系,他拿着加密串到数据库中,是不是能查到这个信息啊,就是比对,如果说能够查询到对应的信息,那就表示我们现在认证成功,我们就可以做一个。
06:13
登录,如果说你查不到,那就表示认证失败,它就不能登录,所以咱们用这个spring security安全框架实现自动登录,里边就是这么一个基本的一个原理,它使用到cookie和数据库。空隙里边存一个加密串,数据库里边存加密串和用户信息这么一个关系,拿着空域信息到数据库中进行比对,如果能得到信息,认证成功,自动登录得不到,那里边我们就是认证失败,就不能进行登录,因为这里边cookie它可以设置有效时长,比如说三天,七天或者十天等等,所以这是一个最基本的一个原理,给各位做一个说明,而我们一会在实验过程中大家注意啊,这过程中大部分。
07:00
安全框架中已经帮咱们实现了,咱们只需要做一些简单配置就可以了,但是你要知道里边是怎么样一个过程,这是关于它一个实现的一个原理的一个概述,咱们做一个说明,然后这个说完之后咱再看一下啊,在spring security中,它的底层对这个是怎么进行封装的,大家看一下这张图,这是我提前画的一张图,再看过程啊。这土我先说一下怎么看啊,咱看啊。上面我是标了1234,哦,这就表示啊,你第一次认证的时候经过1234步,然后下面有标了111213,这是我特别的标号,这表示我们再次发送请求,它是怎么做到的?然后咱们看一下里面的过程,首先第一部分你看啊,当我们进行认证的时候呢,这里边要经过spring security中的一个过滤器,这过滤器咱们之前提过叫username password also the filter,这里边做认证,当认证之后,它里边用到这么一个service,叫remember me service,就是记住这么一个service。
08:12
这service中要做很多事情,第一件事情把你这个信息,它会生成一个token,用这个叫token repttery,把它会写到浏览器中,然后用这个会把这拓问信息还写到我们的数据库中,这数据库包括这里边的过程都是由这个帮我们做的封装,那咱们可以通过它的源码咱来看一下啊。比如现在我们先找到这个过滤器。就是这个username。Password这么一个过滤器,咱们先找到就这个,然后这过滤器咱打开啊,我们看啊。在这里边呢,我们首先得到域名密码,然后这里边进行这么一个认证,当认证成功之后呢,它里边会调用一个方法,咱找到它这个负类,就是这个方法,我们找一下啊,在里边有这个四个size这个方法。
09:07
然后各位看这个方法中,他会做一件事情,里边首先得到当前这个用户这个权限,包括信息,然后用这个叫remember me service,就是我刚才提到的这个地方,在这里边它会做很多事情,那我们看一下这个remember me service我们找到啊,里边就这个。他用这个来实现我们里边的具体内容,然后在这里边咱们看这方法还是给他找回来,刚才这个方法里边,这里它调一个叫log in success,然后这个方法里边咱看它具体什么内容啊。各位看啊,这些方法里边呢,用这个remember me,它首先做一个判断,就里边有这个值,如果这里边有这值的话,它叫一个叫on low in success,咱现在是通过源码做个查看,那这个方法咱也看一下啊,就是里边它会调这个方法。
10:04
然后咱看这里边啊,你看啊,这里边有两类,咱先看第一个叫perist这么一个token remember,然后你看这里边做什么事情,大家看啊。这个代码虽然咱们可能不是特别清楚,但你看他的名字,应该能看到他做什么事情,首先他从一个对象叫token repry,就我写的这个,通过这个干什么呢?你看啊,Create new token就是生成一个token字符串,你可以简理解为就是按照我们一定规则,比如里边包含用名等等信息,或者进行加密,是一个字符串,然后把字符串干了什么事情。A的cookie是不是就放到咱的cookie中去,所以你发现里边是不是就做这个事情,比如咱们画的这个地方,通过remember service,然后这里边把它小toy里边去,里边用到了tokenpy,生成token是做这个步骤,然后做完之后在里边它会把这个也会添加到数据库中,而添加数据库中呢,它里边呢,一会儿咱会给他创建一个对象,它用到了这个对象。
11:12
我把这个直接复制过来啊,咱看一下它的比较底层的部分。啊,咱看一下它的源码,你看这个对象。就是他啊。我把这个。复制一下啊,咱看一下这个源码中的内容。呃,少了一个字母啊。JDBC这个,然后各位看啊,在这个方法中呢,里边你看啊,我创建一个新的token,就是刚才我们调这个方法,然后在里边还有一个叫update token,用update的方法把它是不是加到咱数据库中,就是添加到数据库中这个过程,它里边是在这个对象中进行操作,包括这里边用到了JD bc to的这个模板,就是咱们那个sre里边的JDBC模板,也就是咱们这张图上的这个过程。
12:01
啊,所以现在咱通过源码做了一个查看,给各位再重复一遍啊,当你进行认证的时候呢,首先经过security,一个过滤器username password author filter在里边做认证,就得到表单用户密码做认证,认证成功之后调里边的successful那个方法,然后里边有一个对象叫remember me,这里边做什么事情呢?先用tokenpary生token,然后把这值写到亏里边去,并且用里边咱刚才看的这个对象。就这个JD bc token repy m PL,然后把你生成的ton数据写到我们的数据库中,写到数据库过程里边会帮我们做到,包括各位看啊,你看源码中的上面这个地方写的很清楚。这些都是什么东西?大家看是不是都是建表语句啊,就是他会,其实他会把这个表帮我们创建,咱也可以自己创建,然后里边向里面加数据包,里边改数据,删数据等等,这里边都给咱们封装了这个位置,直接调这个里边的方法把这工作做到。所以这就是。
13:10
它里边做这个认证的过程,通过to,通过cookie和数据库做到各位把这个给他知道,这算式里边的第一个过程就是我画的1234,然后这个过程做完之后,咱库里里边存了数据,数据库中也存了内容,下面当我们再发送请求。它要经过这么一过滤器。那这过滤器我们也看一下啊,它的名字叫这个remember。Me?然后里边啊,有这个方法啊,我们看一下啊,应该是写的不对啊,给它复制过来叫remember me这么一个过滤器。然后奥这么一个啊,咱给他重新找一下啊。咱们啊看一下啊,它应该叫remember me。
14:05
BR。然后加上一个。Me?啊,就是这个过滤器啊,应该看到是它,然后咱们点开啊,在这里边它做什么事情呢?当我们再次发生请求,它里边也是通过它来读取cook token,然后也是查数据库做一个比较,那我们看里面方法啊,这里边有一个do filter,然后在do filter里边他就做了里面的过程,包括各位看啊里边。先你看上面做了就是各种的这些判断,然后在判断过程中,它里边就是掉了这个方法,咱们看啊,里边有这么一个方法,我们给他找到啊。好,我们找一下啊,里边应该在这个位置啊,叫remember me是不是service,你看这里边一个方法叫凹to log in是不是就自动登录,那我们点进去看一下这个方法,这方法在这里,咱们点击往里边看一下,比如我们看第一个大家看啊,这个方法中,它就给我们做这个事情,然后这个事情怎么做的呢?第一个。
15:11
这是不是一个cookie,它就从cookie里边把这数据得到,然后判断它是否等于空,如果它不等于空的话,怎么做呢?把这数据给他得到,因为这数据是加密的,给它做一个解密,解密之后通过这个方法里面一个叫check方法,判断你这个数据跟我们数据库里边那个内容是否一样,如果它一样的话,那我们就给它做一个自动登录,不一样就不自动登录,这个方法中就是做我们判断的这么一过程啊,比如里边它就做了一个判断,包括你是不是这个方法等等,所以这个啊是它里边一个基本的过程,然后咱们看这张图上,就是当我再次方向请求它经过这个过滤器remember me also the filter,在里边用到这个remember me service读取cookie中的ton数据,然后根据它到数据库里边做个比较,看两个是否一样,一样的话它完成自动登录。
16:08
而这个过程中,它里边就是这个查询过程中,在spring security中已经帮咱们封装了,它还会调用这个user detail service里边的方法,把这过程帮我们做一个查询,然后最终做这么一个实现,所以这就是关于我们记住用户名这么一个流程,在spring security里边一个封装的过程里边主要用到它的过滤器,包括里边几个对象,然后最终通过数据库,通过user,包括查询完成的这么一个过程。所以咱们就把这个原理上的东西给各位做了一个解释,各位知道他该怎么去做,这个我们就介绍完成了。
我来说两句