00:01
各位大家好,欢迎继续收看上硅谷视频课程,我们继续来学习spring security,下面呢给大家来讲这么一个内容,关于three security进行认证授权过程中它里边注解的一个使用,咱们主要讲解里边一些常用的注解使用,那我在里边给各位来写一下我们使用进行认证授权过程中它里边。注解,那注解各位应该了解过,咱们用注解的目的是什么呢?就是为了简化我们的开发,因为注解它更加方便,可以简化里边可能配置,而这里边在认证授权过程中也涉及到一些注解,我这里边给各位来说明里边的这么几个注解,那这个注解咱们看怎么来用,首先咱们先总体过一遍,然后给各位详细来演示一下,首先我们看第一个注解,这个注解。
01:03
这个注解什么意思呢?就是判断你的用户啊是否具有某个角色,如果有这个角色,那就能够访问我们这个方法,如果没有这个角色,那就不能反方法,但你用注解之前,需要在你的请类里面先开启这个注解,大家看这个单词啊,Unable global method是不是方法,就是你方法上边针对哪些角色才可以访问,所以我们要做这个事情,但是这里边你在设置角色的时候需要加上一个肉的这个前缀,这咱之前提到过,我们在注解中需要加上,咱们之前也是那个方法里边不需要,所以这个是他的第一个注解,我们设置用户具有某些角色能反问方法。然后里边有第二个这个方法叫pre author,这个方法什么意思呢?它在方法访问之前进行一个验证,在里边我们加上这个,这个咱之前应该说过啊,Has author has Amy,它里边有这个就是权限,可以进行访问。还有一个叫post author,这是什么意思呢?在你方法执行之后做验证,就是你方法执行之后,然后给你返回值,可以做一些验证。另外还有一个叫post filter,还有一叫PE filter,这表示这里边的数据做一些过滤啊,但是这两个用的相对少一点,给各位一会儿也做个说明,咱把几个注解给各位做个演示,主要进行你用户具有某些角色或者某些权限,然后才能访问方法,包括对里边的数据做一些相应的过滤。那咱们下面继续来演示一下,首先我们先看第一个注解。
02:49
给各位讲,这里就是咱们第一个。这个注解,然后这个注解什么意思呢?刚才我们提到了,它就表示啊,我们这个用户具有就是某个这个角色,然后可以访问我们的方法,如果你没有这个角色,那就不能访问我们这个方法,所以这是里边的第一个注解。
03:15
然后这个注解怎么用,给各位来演示一下,咱看一下它的继续使用啊,那我们直接做一下啊。给各位写步骤,首先里边的第一步,咱们先在启动类上边,或者说你的配置类上边都可以先做一个,就是开启这个注解的一个操作,就是我们加上这句话,你看啊,Able global method security,让这个最后开启,那咱们现在把这句话先加上,我就把这句话直接给各位复制过来了,就这句话呢,你可以放到你的配置类上可以,也可以放到启动类上边,都可以啊,我就放到启类上面了,放配置类上是一样的啊,把这句话加上,这就表示开启这个注解。
04:06
是里边的第一步,你只有开启之后才能用那个注解,不开启它不能使用。就是开启之后,表示我们现在认识你要做这个事情,然后这个做到之后,我们到第二步。给各位写一下啊,咱们的第二步操作就是你在C了里边的方法上边来使用这个注解,设置它里边那个角色,这是第二个,那怎么做咱们找到啊,比如说我们现在来到CTRL中,为了更加明显我在里边呢,再来写个方法,咱们专门做我们这个注解的这个演示。比如这个方法我起个名字,假如说我叫这个update。然后这个方法名字我叫update啊,咱们就叫hello update在这里边做操作,那怎么做,在这上面咱们就加上刚才我们写的这个注解。
05:04
就这个S开头的这么一个注解,就这个啊,然后注解里边呢,加上那个角色,刚才提到了角色里边要加一个肉的这么一个前缀,那我来写一下啊。在里边我们来加上啊。Ec,然后里边加上你的前缀,当然里边支持你写多个,你也可以写一个啊,比如说为了明显我写多个,然后里边我加个角色来一个这个肉。下划线,比如来一个cell,比如说我再加一个,这个叫肉。下划线啊,比如说我们叫这个manager。这样的话,咱们在这个方法上就添加了角色,而你在访问这个方法的时候,你的用户只有具有这个角色才可以进行访问,如果你没这个角色,那就是不能访问的,所以里边就是这么一个写法,各位显示注意,里边要加一个肉的这么一个前缀,这是我们的第二步。
06:11
给各位截过来,里边就是。这个部分。拿到咱的笔记中来,然后这个做到之后,我们还有第三步,就是咱们在配置类中呢,为你的这个具体这个用户啊,做着这个东西啊,不是配置俩啊,就是在我们这个里边设置它这个内容,比如在咱们这个里边做个设置,包括咱们看啊之前这个我们应该已经设置过了。就是他们啊,咱们做了设置里边这个肉,包括加这个塞已经做到了,所以现在它应该就可以做这么一个访问,所以里边有这么。第三步。我写一下啊,就是第三步操作就是。咱们在这个user detail t。
07:04
Service。这里边设置你用户的那个就是角色包括啊,咱这里边之前已经设置过了,然后按照这个步骤你看到啊,我们现在有这个角色,然后他就可以完成这么一个访问啊,所以它里边就是这么一过程,那写完之后,咱们最终给他测试一下,看一下这个效果是什么样的,比如我们来访问,他看一下能访问我们这个内容啊,就是咱刚才写这个叫update。Test update啊,那我现在把它启动一下,咱来试一下啊,看一下结果。我们等他行起来,这是我刚才写的这个基本的一个过程,各位把这个知道应该并不复杂,就是用注解方式完成你的这个角色的这么一个设置。那咱们看一下啊,现在应该我已经启动起来了。
08:01
啊,这里边启动了啊,然后启动之后咱们来做这么一个访问,访问一下啊。Local house的,呃,里边应该是test这个update,咱会车,然后进入到我们的登录页面里边,再登录Lucy。123,然后登录。大家看是不是能访问进来,这样的话就可以了,就完成了,对某的用户授予这个角色,然后他的方法只有有这个角色才可以进行访问,这是里边的第一个注解的使用,各位把这个给它会用,这个咱们就完成了啊。然后完成之后呢,下面我们再来看里边的第二个注解,这注解名字叫PO,那各位写一下。咱看这个该怎么去用。我写一下啊,第二个。注解。它是这个路径。
09:01
然后这个注解什么意思呢?咱看一下这个描述啊,首先啊,它里边也需要开启一个注解,一会咱给它加上,然后它适合什么,进入方法前做这个权限的一个验证,比如现在我在注解里边加上这个方法,咱之前说过,当我的用户有这么一个角色,然后他可以访问,包括你害S肉有这角色,Hass安妮also有这个权限,都可以啊,都一样的,然后他可以访问。所以咱们现在这个是在方法之前先校验,如果你这个没有这个权限,不是这个角色,那不能访问,当你是这个角色才能访问,所以咱们现在就是这么一过程,那我这里边给各位来具体写一下啊。首先咱们看步骤,我们写里边的具体步骤啊。它里边的。第一步。咱们在我们的启动肋上边先开启这个注解,也就是在咱们之前写的这位置之前坐这开启,再再加个逗号,把这个也做开启。
10:08
这是里边的第一步,我们做这个事情。这一步必须要有,没有的话,它后面内容不能用,然后这个做到之后,我们到我们的第二步中,第二步呢,就是在你的方法上添加这个注解。啊,在我们controller的方法上边添加这个注解。然后这个咱来加一下啊,这里边呢,比如说我们还是在这个RZ上使用了啊,为了更加清楚,我把这个注点啊,咱们顺便加一个,然后里边加上刚才这个注解叫P。奥,这么一个注解,然后在里边呢,我们可以加上咱们那个具体那个方法,这个方法咱之前用过,也就用害斯肉,害斯安肉害author还是害author都可以,我就写一个has any author了,把这复制咱们加上这么一个权限。
11:05
那这权限呢,比如说我们加上一个就加这个mi了啊,为了咱能防盗,加一个mi,注意它的写法啊。外边是双引号,里边就加一个什么单引号,当你这个用户有这个权限,那就能访问我们里边的这个方法,这样的话,咱们把这个就做到了啊,然后把这个给各位。截过来,咱们在里边就加上。正的内容啊,当然这个方法用咱们之前说那四个都可以,害s author has any author,害S肉,害s any肉都能实现这个效果,咱们在之前应该都演示过了,这样的话就完成了啊,包括在你的用户里边,就是user侧detail service里边,把这些给它加上,咱这些应该都加过了,这个洗完了啊,然后洗完之后咱们下面再来试一下啊,看一下结果。比如说我现在把服务器重新启动一下,因为你看啊,我的用户里边包含了我的Miss,然后这个位置是我的Miss权限能访问,现在应该是可以进行访问的。
12:13
咱们测试一下啊刷新。然后来一个Lucy。123登陆大家看是不是可以了,所以这个就是我们的第二个注解,这注解就表示你在进入方法之前先做个验证,看你有没有权限进行访问,如果能访问进行访问,不能访问就提示我们咱之前说的就是这403页面咱也配置过没有访问权限。所以第二个注解咱们就完成了,演示各位给他会用就可以了,然后除了这个之外呢,下面就是还有一个注解,咱们继续往下来看啊,看第三个注解。这个注解叫posto。这个注解什么意思呢?咱们注意啊,就是在实际中呢,这注解用的不是特别多,但是给各位也做演示,这注解的含义是什么?我这里写到在方法执行之后再校验,也就是说啊,当我加这注解之后,这个方法先执行了,执行之后再校验,这种注解一般用于返回值,比如说我方用返回值,根据返回值我可以做个判断啊,所以它是在方法之后进行一个校验,那咱们现在把这个注解我给各位也做一个详细的演示。
13:33
咱们来写一下啊。就是里边的第三个注解。咱们是这个注解叫post also,这个注解就表示在你方法执行之后做这么一个。校验,或者说做一个验证,这个是在方法之前进行这么一个校验,那这个注解怎么用,跟上面基本类似,第一步也需要开启这么一个注解,跟上面一样啊,就是也是做这么一开启,包括这个p postable。
14:11
然后你看。Pre就是这个东西啊,咱之前已经开启过了。这是第一步,我就把这个就简单结构图了,跟上面都一样的,然后写完之后,咱在方法上边用一下这个具体注解,那我们来用一下啊。还这个方法,把这个我先注掉。在里边加注解,这个叫post。然后在里边加上我们这个内容,比如说啊,我里边还是加这个内容啊,还是把上面那个拿过来还是它。但是这里边呢,我正来做啊,怎么做呢,我在里边呢,做一个输出。然后这个输出,比如说我就输入一个叫update。你注意啊,如果说我这么写的话,那这个肯定能访问,但是比如说为了咱们更加明显,我现在给大家这么来测试啊,你注意啊,我把这个改一下,叫的means,这个叫的means。
15:15
你注意,如果我这么访问,它是不是应该是没有权限的?这个应该都知道啊,因为两个这个不一样,它没有这个权限,如果没有权限正常访问它页面返回的是不是咱那个没有权限的一个页面,是不是要反应这个页面呀,但是刚才我提到这个注解作用是什么,在你方法之后校验,就这方法要先执行之后才能校验,比如说咱们一会儿测试的时候,就算这里边他没有这个权限,我这方法是不是应该也能执行啊?这个我应该能理解啊,就是方法之后校验,方法先执行,然后再校验。那咱们来试一下啊。我这里边做一个访问。刷新。Lucy。123登陆。
16:02
你看是不是就没有访问权限,因为你角色权限不一样,但是你发现啊。是不是输出了证明力方法已经执行过了,所以里边它就是这个特点啊,就是在你方法之后做校验,各位测试的时候,按照这种方式做个测试,你里边做过输出,你看到虽然他输出了,但其实我们还是没有访问权限,因为它是在方法之后做的一个执行。这个是咱说的第三个注解,就是post author这个注解。给各位做了一个演示,这咱们就把这三个演示完成了,然后演示之后呢,最后还有两个注解,这两个用的就相对少一点的,给各位说一下啊,并不复杂,第一个注解叫post filter,第二个叫p filter。第一个post什么意思呢?就是现在我这里边啊,你看啊,比如说你看我这个例子里边最终返回是不是有一个历史集合呀,历史集合中有很多数据,而我用这个注解作用是什么?对我数据经过滤,因为我数据中我做了一个标注,只要用户名是和面一才返回,如果你是额IN2,那它就不进行返回,就是对你的返回数据做过滤,然后这个什么意思呢?对你传入的参数做过滤,比如你看我这例子啊,我传个例子集合。
17:26
第次集合中,如果他的ID能对二做一个整除,那我就给它传过来,如果不能整除就不传,主要是这两个注解给各位写下,咱就眼清了一个啊,因为这作用比较简单,实际中用的不是特别多,用的话也很容易,一个是对你返回数据做过滤,一个是对传入数据做过滤。给各位写下啊,两个注解。我就写到这个位置啊。就是咱们的,呃,最后的两个注解。
18:02
一个叫P。Filter。还有一个叫pre。Filter。这是咱们刚才提到的啊,然后两个注解的作用我们也提到了,我再说一遍,首先这里边就是我们这个叫,呃,一会儿我再画一下啊,我这太靠下了啊。往下往前拉一点啊。先说这个filter,它的作用是什么呢?就是对你这个方法返回的数据进行。过滤,比如我过滤里边只让它返回用户名是我的命一的数据,别的数据不返回,这叫post filter,另外还有一个注解叫PE。Filter它的作用是什么呢?对我们就是传入方法的数据进行过滤,比如说我现在过滤只让它传入,就是你ID值,比如说大于一的数据,或者ID值对二能整出数据,所以里边有这么两个注解,那用法比较简单,给各位快速,咱就以一个为例给大家演示一下啊,我就以这个为例,呃,这个为了明显,我把它就直接复制了啊,咱直接看一下效果就可以了。
19:18
给各位复制过来啊。比如现在我把这复制咱们。演示。我们看啊,这里边我把这多余的先去掉啊。呃,这个位置还是用这个盖头。叫盖头,然后里边它有这个权限,包括这个角色,让他咱们就是。有这个啊权限,还有这个角色。呃,比如说我把这句话拿过来啊,让他有这么一个权限和角色,这叫我means,把这个也改成了Miss,让他能够访问。啊,就是不能访问咱也能看到数据啊,因为刚才咱们刚说到这个注解表示在方法之后就样啊,所以咱就这么写了,然后下面这位置,比如说我们这个名字应该叫user色啊,改成这个。
20:10
忧伤。引入咱们这个实体类看一下啊,咱叫users啊,不是user users下面都是这个users。这个啊,一会咱们给它完善一下啊,然后在里边我们看这个位置中主要示这句话,这句话就表示对你返回数据做一个过滤,Field object是里面默认一个对象,就表示你的每个对象,然后里边就是你这个名字uname,如果name是德me,一进行返回,如果不是它,那就不返回。咱把这个给他稍微改一下啊,在这过程中有一个小细节啊,给各位说一下,就是在user色的里边呢,我这位置加了两注解,我提前加了这注解什么意思呢。表示你的有参数构造,这表示无参数构造,就是一个有参,一个无参构造,当然你可以直接写出来,而在一起的时候直接new它。
21:05
是不是有参够到,所以这是幺幺,这是二幺,然后最终它返回值应该是这个的M1的这个数据。我给它做个输出,这样的话把这注解做一个说明,就是这个post filter,对返回内容数据进行一个过滤,那咱们来试一下,看一下这个效果什么样的,我把它启动一下啊,然后咱仿这个叫get o看一下结果。咱们来启动服务器。好,现在启动的啊,我来仿这个叫。盖头。O再回车里边输入Lucy。123,然后咱们登录,其实我没有权限,因为我设置密密嘛,但是你看啊,在我控制台中。这句话是不是输出了,它输入的是谁是谁,是不是IN1啊,我这里边加了注解,是不是做了这个过滤,这样的话把它就完成了啊,这是一个对反应数据做过滤,还有一个对传入数据进过滤,跟它类似,就是里边加这个注解进过滤,比如我这意思中对二做个整除。
22:11
这个啊,咱就演示完成了,在咱们认证授权过程中四个基本注解,所以各位把这个咱给他会用,做法应该不复杂,就是用注解设置你的这个权限角色,然后包括对于数据做这么一个过滤,这个我们就完成了一个演示。
我来说两句