00:01
来,我们接着做啊。咱们大概回顾一下咱们之前做了哪些工作哈,呃,主要我们是说这个在项目里边,诶把spring security加进去。哎,首先你还是得先去加入这个环境,在加入环境这个这个里边哈,除了正常的这些操作,我们这里边有一个问题。它一启动的时候会抛一个找不到病的一个异常,然后呢,说这个为什么会找不到这个病啊,就是为什么会抛这个找不到病的异常。哎,就是就是我们在这儿有这样一系列的分析。这个filter它初始化的时候找LC容器,LC容器前面在filter前面只能是有抗在listener,哎,他要是找也只能找到spring的LC容器。哎,但是这里边儿呢。呃,到这个里边去找我们要的那个病,你能找到呢,找到一个,呃,功能不完整的。
01:01
哎,对这个请求的地址,这这种资源啊,他进行权限控制不了的,要不就是找不到,找不到就会跑异常。APP。那么好在他还有一个机制,就是他可以在第一次请求的时候啊,他再重新再去找一次,哎,这个时候其实呢,按照他原本的操作,他要找也还是找的是spring的LC容器啊,找不到一样还是跑异常,所以说呢,我们针对这个地方。可以有两种办法,哎,要么就是把两个LC容器呢合并成一个,哎,以前呢,分成contact load listener和dispa so,现在就不分了,把content load listener去掉,只剩下dispa。啊,他去加载所有的spring的配置文件。呃,只不过我们觉得呢,这个就破坏程序现有的这个结构,那么为了避免这个问题,我们去如果说不想改程序的结构啊,以前呢。配置好那些东西我们不想动,哎,我们就改源码,改源码的话,我们去创建一个。
02:07
跟我们要改的这个类哈,同同胞同名的一个类。呃,哎,修改这么两个地方,一个是初始化的时候跳过LC容器查找啊,这边直接把它这部分给注释掉了。啊,就是说反正你初始化的时候找找也你找找着也也不是一个,也不是一个正确的啊,所以说就不让他找了。然后第二次,然后第二个要改的地方是第一次请求的时候啊,直接让他去SP,呃,直接去这个LC spring Mac的LC容器里边去找,哎,咋能控制他找的是spring Mac的LC容器呢。这里边我们用到framework serve啊,它里边有常量去拼一下STEM,哎,把这个拼起来,这就是我们MC的LC容器。把这两个做了以后呢,保证WC这找到的是spac的LC容器,然后呢,我们也在clc容器里边去扫描spring security的那个配置类。
03:11
这个东西扫描那个配置类是跟谁有关系呢。谁扫描这个配置类,这个配置类就在哪个LC容器里边有效。啊,如果是spring去扫描的话,它就只是对service呀,Map这些东西有效,呃,它如果是我们springc的这个里边扫描的,呃,它对我们浏览器发请求呀,Handle呀,这些东西是有效的。啊,所以说这个,呃,有这样的这个。考虑哈,正因为是希望他们能够对浏览器请求进行全员的控制,所以说把它放在stemc的LC容器里边去扫描啊。整个这些东西呢,它都是彼此相关联的啊,这些都是一环扣一环的。把这个问题解决了以后呢,我们下边就可以在项目里边啊,做一系列的具体的操作,哎,首先呢,放行登录页和静态资源。
04:06
诶,然后提交登录的表单啊,先在内存里边做一个认证,也就是所谓的登录。哎,我们表单呢,让他提交请求到这个地址。昨天有同学,很多同学就问哈,说这个。地址有点不理解啊,就说你看呢,我们这边。嗯。我这儿写了这个地址的,这个好赖,这个还还能对应到一个页面啊,这个这个我们觉得还可以,那你这个是处理这个登录的请求,然后呢,也没有跟它对应的view controller,也没有跟它对应的handler。有同学就觉得表单提交提交请求呢,到这个地址,觉得这个事儿就有点不好理解了啊,你没有写哈啥的去处理他呀。哎,那么这个时候就是说。呃,这个请求是spring security处理的。
05:03
啊,你看我们以前呢,写一个地址哈。我们写个request mapping哈。呃,里边什么什么,就是我们随便写一个啊。你写一个地址,下边得写一个handle的方法来处理这个请求。呃,现在呢,相当于我们只写了这样一个地址。哎,然后呢,下边这个方法相当于是spring security,他已经准备好了。哎,我们只不过是把这个请求通过这个地址呢,跟这个跟他准备好的那个操作给它关联起来。啊,就是这么回事,所以说呢,这个对应的handler什么的就不用我们写了啊,就是让他这是,所以我们才说呢,通过这种形式,从这能看出来是spring security把我们登录的这个功能哈,它给接管了啊spring security它把这功能给接管了。
06:01
这是我们去设置这个启用参数的名字。诶,然后这边再,然后这是退出的登录。呃,这个然后把内存登录改成数据库的登录,这个里边这一步呢,涉及的操作比较多。因为我们得需要用build对象去装配我们user details service。哎,这一步呢,对应的在我们这儿就是。在另外一个重写的类的方法里边,Build user details service,哎,把user details service给它传进去。哎,这是这是这是一个一个操作。嗯,然后呢。在这个user details service里边需要重写一下load user by username。诶,Load user by username啊,这是它的。嗯,付磊海。
07:03
啊,对,不是看不是看这个方法啊,讲错了。看我们这个方法。嗯。嗯,不是这个。嗯。这个还。呃,就是就是这个方法啊,我们需要去实现这个方法,实现这个方法呢。首先呢,是他给传过来的这个username,他是表单的。呃,表单提交的这个账号,根据这个呢,先把这个我们din对象呢,先把它给查出来。哎,把这个查出来以后呢,Get ID。拿到我们admin ID,再根据admin的ID,哎,我们去查这个已经分配的角色,已经分配的权限。创建一个集合,哎,将来将来角色和权限的信息就放在这里面。哎,那么这时候往里面放的时候,角色呢,前面加一个前缀权限的信息呢,就直接放里边就好了。
08:03
然后这个都封装好以后,存放到security admin这个对象里面。哎,所以说这个方法写的话呢,其实这里边儿有好几个地方需要提前去做准备,哎,这是一个提前要准备的。这是一个提前要准备的,这是一个提前要准备的啊,还有一个我们去创建security me啊,这也是一个提前要去做准备的。啊,把这个这几个准备工作都做好了以后,我们才能够去写这个方法。嗯。好嘞,啊啊,这个方法完事以后啊,这就是我们昨天最后就是做到这儿啊,那下一步呢,就该是看看怎么样把密码加密以后啊,能够给它存放到。呃,能够在存数据库的时候啊,用的是加密的这个密码。
我来说两句