00:02
各位欢迎继续收看上硅谷视频课程,刚才内容中呢,我们讲到了spring security在web开发中的全限方案,咱们首先说了认证,在认证中我们可以通过配置文件设置用户名和密码,也可以通过配置类设置,但是这两种方式在实际开发中并不实用,因为咱实际中一般都是我们查数据库做到,而查数据库需要怎么做呢?咱就需要用到第三种方式。自定义编写视线类,得到用户名和密码进行操作,那我下面给各位演示第三种方式,咱先做一个最基本的演示,后面咱们有一个案例会加上数据库,那第三种方式怎么做?给各位先做一个基本分析,然后咱们做一个详细编写。大家注意,在我们这个security,它在认证过程中,他首先呢,先去找你的配置文件,还有配置类,如果他发现在你配置文件中或者配置类中有用户名和密码设置,那他就去找这个用密码,如果这里边你没有做设置,那怎么做,他就会去找一个接口,这接口咱们刚才提到过,这个接口叫user details service,到这个接口中找到,就是你通过表单提交或者查数据库或者其他方式设置用密码,然后做这个认证的过程。所以咱们下面就需要写这个接口的事先类,把这个过程给它做到。
01:34
那怎么做,我把步骤写下,然后咱们通过它具体做实现,这是我们说的第三种方式,设置用密码,它叫做自定义。实现类来进行这么一个设置,那怎么做咱们看啊,首先里边的第一步操作,咱们肯定创建一个。配置类,在配置类里边呢,咱就不需要直接设用密码,就设置一下你要使用哪个这个user。
02:06
D它这个时间内。Details service的实现类,把这个需要做设置,但是这个实现类咱一会需要编写,并且把它注入到我们这个per类中,这是里边的第一步,然后这步做到之后,咱第二步就来编写这个接口的实现类。在时间类中,咱最终你可以查数据库或者设置,最终会返回一个user对象,在这个user的对象里边有我们得到的用户名。密码和他操作的那个权限,咱目前用到权限,当然过程给各位会写出来,这样的话就能实现自定义时现内把这个运用密码就设置,这是咱们一个最基本步骤,那这步骤怎么做,下面给各位来写一下,咱们看一下它的具体过程。
03:03
再看怎么做。首先来到我们项目中,这是我之前配置类,为了明显我这么做,我先把这配置类啊给它先注掉。咱们重新写一个配置类。比如这个配置类,我就叫security config这个。的一啊,咱为了区分config,比如叫config这个T啊区分一下。咱做了一个自定义的过程,然后在里边怎么做呢?注我的写法啊,首先里边的。第一部分。在我们的这位置之前,咱是不是自己设置用户名是Lucy,密码123,现在不需要这么做了,把这个去掉,在这里边怎么写呢?咱们来设置一下这么一个东西叫user details service,设置你自己写那个实现类,这实现类咱一会儿通过这种方式给它变出来,咱需要给它注进来用。
04:03
加一个叫user details。Service。比如说我们叫user details service,把这个一会咱们编写实现类,把它注进来,这各位应该很熟悉。四是spring里边的基础支持,然后把这个对一下。设进去设置之后,在里边我们有一个。Password e code,然后把这对象设置,因为这对象得用at b已经创建出来了。把它。设进去,这样的话就完成了配置类编写,在配类中咱就是注入user detail service,然后把它设进去,指定你用到哪个右侧底它L,然后用它实现我们的用户名和密码获取,这就是配置类的过程,咱把它就快速做到了,这时候算是我们的第一步操作。我高位。接过来,这是我们的第一步。
05:02
把这个拿到我们图上来。然后这个做到之后,下面我们看一下我们的第二步操作,第二步呢,咱就需要编写一下这个实现类了,然后在实现类中把这过程我们做一个具体实现,那咱们来写一下实现类,那我来操作一下啊,比如说现在呢,在这里边为了明显我还是。再来建个包。这个包我就叫。Service,然后在service里边我来创建这么一个类。先来做个创建啊,我们看这包的位置应该在最下边啊这个位置。咱建个类,比如这个类我起个名字,我就叫买user这个地。Service。然后怎么做呢,让它实现我们的接口,就刚才咱们用到的user details service,我把这个啊,咱直接就分过来。就是我们的。这个接口就是创建他比个视线类。
06:02
把这个创建,然后它里边有一个方法,这个方法咱之前说过叫load user。By username就是根据用户名,然后我们做这个操作,这个啊我们就写出来了,然后在这里边我们来实现这个过程,但是大家看啊,这个load by username这个方法返回这个叫user details,而user detail是什么呢?咱先看一下啊,这里边。有它的一个结构。比如咱们找一个。你看里边啊,这位置是u detail,然后这最终其实反是一个叫。这么一个对象,而user detail这个返回过程中呢,其实咱们有多种方式,那我们看一下这user detail啊。他本人是个什么?是不是也是一个接口,就是我们现在第一种方式,我可以再写个类实现这个接口,然后里边设置你的用户名和密码信息,包括也可以用spring security里边给我们提供了一个优秀对象,它里边营造的过程,比如说啊,咱也可以再找一下。
07:06
咱们找这个啊,你看里边的这个写法,里边是不是new一个user对象,然后这个user,咱看到咱看这个user啊。清楚看到他是不是就帮我们实现这个接口,所以用它也可以,然后这里边你看啊,他这过程中有一个有三构造三个参数,第一个用户名,第二个密码,第三个是个collection集合,就是你的操作权限,也就说我们在这个过程中,咱可以怎么做呢?就在这方法中,现在我们可以查数据库,得到你的用户名,得到你的密码,然后得到用户操作的权限,把这个通过new这个user给它做个返回就可以了,现在我就做一个简单的演示,后面咱们有具体案例,真正查数据库把它做到,但是现在过程应该很明确了,我再重复一遍,然后把代码写完。
08:00
在这过程中呢,首先因为我们现在没有在配置类中设用密码,也没有在配置文件中设用密码,所以它怎么做,在里边我们就设置这个user侧detail,它就到user侧detail中找到你返回的用户名,密码和权限,而user detail里边我们写这个类,包括实验这个接口的方法,方法中咱可以插数据库,最终可以按照这种形式,刚才咱们看到的。可以给大家看一下啊。把连带打开。按照这种形式,我们可以直接new这么一个优秀对象,里边传用户名、密码,还有你操作的权限,最终通过它做一个验证,或者做一个认证。然后咱们现在把这给它记完整,首先呢,因为这是一个类,在类上边我们加上一个。注解,然后给它起个名字,因为这个名字你注意啊,要跟咱们刚才的这个名字要对上,因为他要把这个对象给它注入进来。
09:01
这个我应该清楚啊,是咱们里边的基础知识,然后在这个里边怎么做呢,咱就可以直接我就直接new了啊new一个。User对象,注意是security里边一个对象里边三个参数,第一个用户名,第二个密码,比如说用户名,假如我叫这个Mary密码嘛,咱肯定要加密一下,我就妞上这么一个,咱刚才写到的那个加密的那个方法啊,我把那直接分过来。他刚写过,就是用到里边的。这个对象。把这个拿过来。然后在里边我们调用它这个方法。比如说密码我们就还是这个123,然后除了它之外,最后它有一个操作那个权限,咱注意啊,看它的源码中这权限是个什么。是不是一个集合呀,然后里边它集合中是这么一个对象,那我现在我就给他手动,比如来一个集合了啊,但是实际中这个集合这个权限对象咱肯定也是查数据库得到,现在为了方便我直接。
10:12
做这么一个操作啊,比如叫这个O权限。我们等于用这个权限,在这里边有个工具类啊,咱就直接操作一下啊,我写一下这工具类。叫author th ho。S。里边有一个方法,这个方法,然后里边加上你的角色,因为咱暂时没有用到,我就随便写个,后面咱会有这个功能,现在咱是为了里边有这个数据可以。但是我强调啊,这权限的位置呢,你不能写空,因为它不只是空,你必须有个值,这值啊,比如说我们就直接随便写一个集合给它传过来可以了,咱看到源码里边是一个collection集合,我直接就new一个Dis集合,这样的话把这个就完成了。比如说现在我们在做认证过程中,它就是通过user detail返回的用户名和密码,咱做个认证,如果说咱加入数据库,那我通过这个肯定是咱们表单的用户名查数据库能查出数据,返回查出数据,咱给他抛出异常,或者跳转到某个页面,进行我们的这个过程。
11:22
所以这个啊,咱现在把这个最简单的这个过程,我们就做了一个快速的实现啊,当然里边有很多的细节,咱后面给他慢慢完善,现在把基本的流程应该做到了。这个给各位也是。接过来。所以现在呢,咱就完成了自定义实现类方式设置我们的用户名,还有这个密码。把这个啊,我们就最终给他。做到了,就是里边这过程我就写到这里啊。然后这个做到之后呢,咱下面我们就把这过程啊给各位,咱们最终来做个测试,看一下我们这么写之后,这个效果能不能做到,咱们先检查一遍,然后测试啊,首先第一个我写的配置类,之前配类我已经注掉了啊,咱就写的新列个T配置类里边注入user detail service,然后在conf里边把这个设进去,包括new这个对象这事之后咱们写了一个user detail实验类里边就是得到U密码给他u user侧返回。
12:29
包括这个权限,目前没有这个功能,咱给它加上有这值,后面咱会说的更具体,但是你注意在我们注入过程中,这个名字跟他要对应啊,就是名字跟他要一样,要不然你这个输不进来,这样的话我们就完成了定义实验类的方式设置用户名和密码。然后咱们下面把服务器启动,我们还是访问我们的controller,用我们刚才的麦123这个用户名和密码,咱们做最终登录,做一个最后的测试。
13:04
看一下这个效果是什么样的啊。咱们启动了啊,然后我现在来到里边,比如我先刷新到这个页面,咱们登录。Mary。密码应该是这个,呃,看是多少来着,密码是123登录一下。123,然后现在我登录。大家看是不是登录进来了,所以这样的话呢,咱们通过第三种方式把这过程就现出来了,这个我们就知道了,所以也就是在目前的过程中,咱们在web开发的确限方案中,用三种方式实现了用户名和密码设置,一个是配置文件,一个是配置类,还有一个是定义时间类,咱们在实际开发中一般经常用的是第三种方式,通过自义时间类做个设置。但是第一种第二种又有它的场景,比如说你现在比如我约定啊,我这项目中啊,我这用户名如果是一个超级管理员,我就只能用adin这个用户名登录,那这里边你可以用第一种第二种设置,但是大部分时候咱都是基于查数据库,用自定义的方式把这做到。
14:15
所以这样的话,咱就把这个认证的一个最基本的三种方式设置,用密码就显示完成了。
我来说两句