00:01
各位大家好,欢迎继续观看上硅谷视频课程,我们继续完成任案例,刚才内容中呢,我们完成了核心配置类的编写,然后咱们在spring security核心中还缺少最后一部分,就是它这个user detail。编写user detail我们肯定要查数据库,然后得到我们的具体内容,所以咱们下面就来编写这个user detail。但是这里边我强调,因为咱们这个做的是一个比较完整案例,里边肯定要写到很多的模块,这个模块不是我们课程内容的重点,咱们的重点我在这内容中放到我们的spring中,关于这个模块中的具体讲解,各位可以关注上硅谷鼓励学院中在线教育项目,里边有针对这个模块的将其说明。咱们课程中的重点主要放到secret部分,那咱们下面就开始写这个screen secret里边的user detail service部分。
01:01
那这里边这个模块中,因为有很多内容,我在资料里边把这模块中的核心代码给各位听出来了,然后我现在把这代码咱就复制到我这个模块中来,就是service ACE中,咱们首先先来个包,我叫com.at。硅谷点上AC。Service,然后把这个代码咱给它就复制到里边来,因为咱要查数据库嘛,为了方便我就在这里边直接写我们的代码,咱重点放到spring这部分。然后在里边再拿出来之后,这结构我们看一下啊,这是一个比较完整模块,里边有controller,有service,有map map里边就是查询数据库,那我现在我就把这个user detail service写到我们的Switch里边,那我在这位置我就来写一下啊,关于我们这个就是user detail部分。咱们来写个类类的名字,我就叫user detail service m TL,把这个做创建,创建之后呢,让它实现我们这个接口,接口名字叫做user detail service。
02:17
我写一下啊。User。Details service把这个接口我们做个实现,然后包括在这个类上边,咱们加一个service这么一个注解里边给它起上这个名字,这名字特别注意啊,因为咱们在spring c里边要用到就是这么一个对象,比如说咱看一下啊,当时我们写那个核心配置类中。想要用到就是。这个对象,所以咱名字跟他要一样,要不然他不能给这个注入过来啊,这是我们写的名字,然后咱们实现里边这个方法,它的方法就叫做load name,这个逻辑咱之前说到做根据用户名是不是查数据库,然后最终返回security里边要求的那个对象,那我们来做一下啊,因为现在要查数据库嘛,所以里边咱需要注两对象,就是我这模块中有两部分我们看一下啊,在这里边。
03:17
有一个是里边service中的这个user service,因为大家要根据用户名查我们这个那种,所以把这个我们需要给它做这么一个注入啊,就把这个注进来,然后除了它之外,里边还有一个叫这个permission service,因为咱们也需要查询它对应那个权限部分,所以这个也需要完成这么一个注入,那我们下面把这个咱就继续给它写一下啊,这个包结构,呃,多了一个名字啊,把这名字我稍微改一下。这个名字啊,我就叫acl。啊,给他先改一下啊。咱等他修改一下,然后修改之后咱把里边的内容给他具体来完成一下啊。
04:03
稍等,等他改完啊。好,这个应该可以了啊,然后现在我在里边注入这我填写好的,咱们来一个auto to y,加上这个private user service user service,然后再加上一个auto private,这个叫permission service,就是操作我们那个菜单或者权限的,把这两个注入,注入之后,因为咱一会儿要用到里面的方法,那咱们在里边写一下我们这个具体的逻辑,那逻辑怎么做,我写一下啊,第一个根据用户名先查询数据库。那咱就调这个user里面有一个方法,这些方法就叫select by name,咱把这个用户名给他就。传进来啊,传过来这个叫。Username,然后它会返回咱们那个用户那个对象。那这个方法我们来看一下啊,The select版username跟用名查,然后它的方法中你看啊,就是用my plus传入一个参数,然后返回你这个user的这么一个对象,所以这是里边的就是第一个啊,咱们查询,然后查询之后这里边我们做一个判断。
05:20
咱们判断一下,如果说这个返回到这个用户信息等于空。那就表示数据库里边是没这个信息啊,那肯定就是认证失败嘛,认证失败咱就给他直接子肉。New一个叫这个username。Not found exception啊,提示他说这个用户。不存在。这个啊,是咱们一个判断,如果说它不等于空,那怎么做,咱是不是叫瑞退new它那个对象了,但这个对象呢,大家注意啊,因为他现在反这个user对象不是spring security里边要求的,而user对象呢,这里边我刚才在spring中还创建了这个对象,所以咱把它返回是不可以了,因为它实现了user d它这个接口,那能给它就是操作一下啊,看看怎么做,首先第一个我们现在先妞一个。
06:20
User对象啊,先给他妞一个啊,就这个,比如叫这个CU。U等于new上一个U色,咱先妞下这个U对象,是我当前自己写这个U对象,然后妞完之后在里边我们来做一件事情。注意啊,咱们要做什么事情,给各位做一个说明。啊,各位看啊,就是我现在啊,如果说我在这里边new对象他是不是我当前的项目中的这个user,而子要返回的不应该是这个user,是咱们spring security中的。是这个右侧把它返回,所以在new对象的时候需要做点处理,在它这位置给它加上一个包,因为我的名字都一样,所以你可以启成不一样,但我现在一样的话,咱就要给它稍微做一下处理啊,给它加上一个刀,就是new这个对象。
07:14
这个应该能看懂啊,咱就找到security中我们对象,然后念完对象之后怎么做,把咱们查出来的对象内容给他复制到这个对象里边去,就是security那个对象中去,那怎么复制,你可以一个一个set,但是现在有工具类叫这个b us。在这工艺类中有个方法叫这个copy practice,咱就把我们查询出的user放到这个cur user里面去,给它做一个复制,然后复制之后下面呢,咱要做件事情。我写一下啊,就是根据你的用户。信息。或者根据用户查询出用户那个权限的列表信息,我们需要做查询,而权限列表咱可以调这个permission three里边这位置,我有一个方法,那我们找一下啊,它的方法应该就是这个。
08:10
叫select permission value by user ID里边就传入你那个用户的ID,根据ID查询,然后它返回的就是一个list的集合啊,把这个做个返回,比如我们叫permission value这个。历史的。得到用户权限列表,然后这个方法咱们也是看一下啊,我把它打开到这里边,然后这位置做了判断,如果管理员查所有不是管理员根据ID查询,然后这个方法呢,我是写了一个circle语句,咱们来找一下这个语句啊,因为这个语中的涉及到应该是有多表的查询。那我们找到。这个方法来搜一下。就是这个啊,大家看这个语句啊,你看语句怎么做的。首先你看啊,在里边我加的是不是in的作用内链接查询,根据我这个就是ID,然后查询你这个相关的角色,也就是咱们的这张图上大家看啊,我现在有这个用户的ID,我想查询这个用户,他能访问那个权限列表,就是他的菜单列表,那怎么做利用用户跟角色出现关联,因为我现在用户角色第三张表,比如说二幺。
09:28
跟1112是关联上,然后112再跟这个关联,再查询你的菜单,所以里边要做到多个关联,就是这里写这个inner作影内链接,让你的角色菜单,角色关系,包括这个做一个内链接查询,最终得到你的具体那个就是权限的列表啊,这是写了一个内连接的查询语句,把这个做到。所以咱们现在把这就可以查出来,然后查完之后咱在里边啊new一个对象,就这个叫user,咱们在里边定义那个对象。
10:03
就是这个。我们叫user,等于上一个user,然后像这里边呢,来设置它那个权限的列表,就是我们这个permission例了,是不就可以了个,然后最终把你这个user做个re t这个user detail方法就完成了,根据用户名查询用户信息,然后再得到用户的权限列表,最终都放到我们这个security user里面去,因为里边有信息,还有列表,最终给他re,退这个方法咱就最终。把它就写完了,这是我们完成的user detail的这么一个编写。所以各位啊,把这个给大家知道。我把这个给各位截过来。我这里写一下,这个编写的就是user details service。这个完成了啊,然后咱们完成到这里之后呢,其实咱们把这个secret里边的核心部分应该已经给它做到了,然后这个过程给各位在快速总结一遍啊,首先里边的第一部分,咱们在spring里边先编写了几个相关操作的工具类,还有处理器,比如说密码加密的。
11:23
退出的token生成的,还有这个未授权的,编写之后,咱们写了两个过滤器,一个是认证的,一个是这个授权的,两个过滤器认证嘛,就是关于这个操作过程,然后授权就是token,包括red这个操作,最终写了核心配置类里边配置了它的相关的这些内容,就是咱们刚才做这些配置。这个应该做到了啊,然后过程中用到了token,包括red这个过程,这个写完之后,咱们这里边最后还缺少一个叫user detail,因为你在做认证的时候就是这个里边咱们首先得到是我们的用户密码,然后当你re return,它是不是找它对应那个user detail这个对应的方法,所以我们刚才写了一个user detail。
12:13
就是里边的。这个位置啊,咱再找到啊,就刚才刚写这个这个方法。在里边跟用户名查数据,然后查询用户对应的权限列表,最终给他做个里退,然后他就完成一个认证,认证之后做授权,然后进行我们的对应的访问,所以这就是关于里边核心的这个代码编写,咱们把核心部分我们就给它完成出来了。这个啊是我们做到的啊,但是过程中呢,因为咱是一个比较完整一个案例,里面还有气压代码,气压代码中呢,其实就是最基本的增删改造部分,但是咱的课程重点还是放到我们的任C这部分,然后其他部分呢,如果各位有想更详细了解,可以可关注上归谷古力学院,有一个东西叫在线教育项目,里边有我讲的关于这些模块的降级说明咱们现在重点是在部分,所以这个核心部分我们应该就给它完成了。
我来说两句