00:00
下边我们说这样一件事,我我们现在这个密码。在数据库里边还是这个铭文的方式去存储的。我们得想办法给他这个加密了。那么我们在spring security环境下边这个密码加密怎么做?嗯。嗯,密码的加密哈。首先呢,它提供了一个接口叫password。哎,有这么个东西。呃,里边就这么两个方法,一个叫code,一个叫matches。Include。就是加密,因为影扣的这个本身的含义是编码。其实加密不就是给他用另外一种方式重新去编码吗?Match match的意思是匹配。哎,就是。
01:01
这两个东西放在一起去匹配,这时候看它的这个变量的名字哈,我们能够其实是能够看出来哪一个是铭文,哪一个是呃,加密后的密文。这个绕password password就是一个密码的意思,这个绕呢,是原始的生的,没加工的这个意思。这个这个就很明显了,COD password,这是编码以后的啊,所以说拿铭文和已经加密以后的都传进来去进行这个加密。那我们要是想做这个加密的话呢,哎,我们就实现这个接口,写一个类,把这俩方法都实现了就好了。首先认识一下我们提供的。哎,这个加密,呃接口。
02:00
嗯,CTRLC啊,这里好多注释哈,但是其实就俩方法,一个是引扣的。一个是MAS。哎,就是这个引扣的,他是做这个加密的。加密。嗯。哎,然后呢,下边这个呢,是呃,校验或者说就是说检查。一个铭文密码。是否?和一个。呃,密文的密码。哎,这个一致。一样的,它也是考虑到密文是不能够反推出铭文的,所以说要把铭文加密以后去比较这个密文。那那么我们要是使用的话呢,就是先创建password encoder它的实现类。
03:13
我们写个类去实现它一下。呃,我们也放这个config下边吧。来个my password。Employments。Password。Co。哎,这时候发现这有俩哈。这俩这该倒哪一个呢?不是,你咋知道要找第一个呢啊,你是你,谁给你的信心?这个过时了啊,所以说这是这个记不住没关系,你看我就是我也记不住啊,记不住没关系,咱们就试一下。
04:06
啊,第一个不行,就是第二个。哎。第二个这个是我们刚才看的那个啊,这个是可以的。呃。然后呢,把这两个这两个切换方法拿过来,我们去实现一下。加密咋加密哈,暂时呢,还是用我们呃,JDK提供的那个message dIgEst啊,用它去加密。啊,所以说这个第一步呢,呃,我们是先创建一个message dIgEst的这样一个对象。Message。Get instance算法的M第五。他这有异常。这就压根不让你往外抛,你就就只是允许你这个那个那个叫拆盖一下啊,我们这边。
05:05
啊,咱们尽量不要用魔法值是吧。这是我们的算法。这是一个message的这么一个对象。创建好这个对象以后呢,第二步我们得去这个。呃,把把把把这个东西呢,得给他获取它的字节数组。那这个时候看一下它有没有这个,它没有这个对应的方法哈。这是Charles。Char at。Les什么乱七八糟的哈,它没有一个得数字,字节数组的,那这时候得把这个东西转成字符串,这个叉sequence呢,就是字符的序列嘛,它是一个接口。
06:01
这个接口呢,它其实是有一个就是字符串哈,我们string呢,是它的一个时间类啊,所以说这个我们可以向下转型啊,咱们给它转成string。那看一下string的构造器,有没有一个可以传sequence。也没有啊,那就只能是去给他转一下。强转一下。这么样哈,就是给这个。强转成string。然后呢?哎,获得这是我们这个input的输入的字节数组啊,第三个是实现这个加密。DIgEst。Get。这叫啥玩意哈,DIgEst。传入这个输入的,返回一个输出的。
07:01
第四个呢,是转换为16进制数对应的字符,哎,然后就是为了便于我们这个存储。这个是我们,是咱们采取了这么一个办法,Big integer。然后呢,这传了一个一,这传的是一个我们output。Two string里边呢着一个16。这就是我们一个加密的结果。完了,我们要返回的就是它。哎,反问就是它。呃,如果说你这边抛异常的话呢,就返回就是闹。这就是我们这个引扣的加密呢,是采取这样一个办法。然后呢,这个。呃,Matches这个进行这个比较呢,其实还是把它加密以后和它去比一下。哎,那这个加密的过程呢,其实还是这个过程,那么就不妨呢,把这个东西我们去给他再抽取到一个,呃,方法里边,就这个类里边,他自己私自用的这个。
08:11
就是一个。Private。靠。嗯,这边让他传一个。你还是传这个一样的这个类型吧,差sequence啊。啊,这个叫做什么绕。Pass password。呃,把这个代码拿过来。啊,它返回字符串啊,然后我在这边呢,去调我们这个他return哈,返回的就是这个privateco。把这参数往里边一传。APP。然后呢,这个matches也是先对这个铭文密码进行加密。
09:10
我们这个。加密以后呢,得到了我们这个密密文啊,就是这个。嗯,加密以后的,嗯。是,我们需要拿它和它去比一下。Coed。这是加密后的,我们这么还是按我们习惯哈,这个叫做表单提交的密码,Form password。哎,然后呢,这个是我们在声明数据库的密码。嗯,就是这个password。就等于这个encode的,我们这儿只是给这个变量换个名啊,仅仅只是换个名。第三个呢,比较一下。
10:04
啊,就直接就把他俩比较的结果这个返回来就好了啊。这是我们的一个,这个是这个类啊,我们以这样一种方式去实现。嗯。那么我们后边为了方便引用哈,把它呢,我们也放到这个LC容器里边,Component component啊加到LC容器里边,这是一个我们的给它整了一个时间类。整完这个实验类呢,我们还是啊,在我们security的配置类里边。我们去这个装配或者叫注入啊,我们这个,呃,上面这个建的这个类装配它。呃,哪去了?
11:00
这个。这个叫my passwword。Encoder。呃,然后呢,奥特装配一下。呃,把这个东西放在哪呢?在这儿叫一个password coded这样一个方法,把这东西给它传进去。传进去啊,这个它就起作用了,回头呃,加密啊,校验的时候就会从这走了。哎,然后呢,我们去使用一下啊,这个它的对象。嗯,用一下用一下就是builder去调一下这个方法。
12:00
就在我们调了user details service以后,调encoder这个方法,把这对象往里一传。哎,就行了,就搞定了啊,那么我们为了试一下看看它对不对。啊,我们。把这个数据库里边呢,把这个密码这儿改一下哈。嗯,我们得去给它运行一下,才知道这个密文是是多少。啊,嗯。我就直接在这儿整一下了啊。哎呀,我去。他给加了个静态。尿一下。不过他是私有的。啊,私有的在当前类里边是可以用的。
13:04
4297793。嗯,当然如果我们如果比较介意的话呢,咱们也可以给他转成大写的。转成大写。这样看着比较硬朗。Control c。我们可以先放在这儿。就先放这一个哈,先放这一个,那就吉米拿123 123可以登录,Peter应该是登录不了才对啊,虽然说在他这放的是铭文。咱们给它跑起来。好嘞。这边回来,回到我们index。
14:00
过来一下吉米123123。这个能过来哈。然后呢,如果是我们皮。我们也他。过来by credentials这边不能不让登录啊,这就说用户密码就是错的啊,这就说明我们这个呢,这个时候它起作用了。
我来说两句