00:00
好,这一节开始我们就把项目里面的基本的一些类啊,基本的一些结构给大家准备好,准备好之后啊,就开始正式的进行功能的开发,按照window档的顺序,先准备什么呢?先准备几个配置类,第一个配置类就是我就是现在我们在项目中使用的my best plus,它里面有一个分页插件,这个分页插件呢,需要一个配置类才能生效,那我们可以直接把这个来给它CTRLC,诶复制一下,复制完之后,注意这个名字叫做myc,我们也用这个myc吧,来CTRLC复一下啊复制完之后呢,在这个conig目录里面,我们新增一个类叫做my con。啊G啊好,来把这个东西啊给它粘起来,粘的时候注意上面有一个包啊,诶怎么报错呢。嗯,报什么错?Classig is public should be DEC in the file哦,应该是我这个名写错了吗?哦,写错了啊,这个MY呢,我写成MP了啊,写成MP怎么办呢,这块改成MY吧。
01:02
哎,这个对了哈,My conig这里面配置的是呃,My best的一个分页,My best的一个分析插件啊,用了一个什么六了一个配置nation interceptor,如果说你想对这个分页呢,进行一个大小的限制,你可以在这块把这这干码取消,它可以设置一下limit,然后在这放几个参数,第一个单页的这个限制的这个数量,哎默认是五五五百条啊那么我们可以在这块写成一个什么,呃,写成一个我们想要的默认的这个页数的一个大小,如果你要是写一个小于零的,或者写一个负一,相当于没设置啊,那那那这个呢,就就相当于嗯这个无线条是吧?啊那这可以先先注释了,因为我们现在这个分页大小呢,达不到这么大,都是我们前后端的约定好我这一页是多少是吧?哎,所以呢,这个不设置也行哈,我们分页的这个插件啊,分页插件这样的一个配置类就准备好了,下一个准备啥呢?准备我们这个swagger啊swaer它的一个配置来,再把这个给它CTRLC复制一下。那这里面东西比较多啊,来CTRLC复制一下,复制的时候注意上面这个包,这个包呢叫com点艾硅谷点智慧校园点con,现在我们这个包是啥呢?现在我们这个现在这包叫做com.S硅谷MY智慧校园点config,要注意这块有点不太一样,所以复制的时候呢,大家也要小心啊,这个先先别带了,先别带了,只要复制下面这就可以了啊,来controlr c复制一下,复制完之后注意这个类名叫做swa哥to con,好,在这块我们也创建一个类叫swa哥to conig。
02:27
Sww To Co f IG创建好之后,上面这个不要动啊,在它下面把这个给它删掉,然后CTRL为粘一下,这就是swa two它的一些配置,这边其实可以我看一看啊,这个多没多,哎,不多没问题啊,这边有些信息呢,可以自己改一改啊,像你自己的用户ID可以改成自己的是吧?哎,下面这个用户临时ID也可以改成自己的是吧,可以带上你一些自己个人的一些信息,那都没什么问题,那我们目前呢,就配置了一个swaer,然后主管有个组组的这个做group group name叫做web a啊,Web epi啊好,呃,这个呢,是我们扫什么呢?是扫这个。
03:08
呃,生成我们的接口文档扫的一个范围,扫的范围这块呢,我们可以控制一下现在它扫的范围是啥,来看一看API result handleless selects with class educationation,它是找这个API operation啊,这个什么呢?这个呃,注解所在的位置全都给我们生成对应的API和这个API测试的一个工具,我们后面也可以给他改一下,改成什么呢?嗯,给它改成就是扫,扫一个包的啊,扫一个包的,然后这个后面我们回头再改吧,如果需要再给他再改它,如果不需要的话,暂时写成这样也是OK的,也是没有问题的啊。下面这个我们也可以改一下啊,例如这个名字啊,我们用的是艾特硅谷啊,用的网站呢也是啊硅谷的官网用的邮箱也是硅五的,哎,官方的这个QQ邮箱,那如果说你想改成你自己的,那么你也是可以在这块把这些关键信息改一改,如果暂时不需要啊,用这个名字也行,也OK啊,这个wa to的con这个配置类就准备好了,下一步啊,下一步准备什么呢?准备U下面的工具类,U下面一共需要这样几个工具类,第一个是验证码图片的一个工具类,要生成验证码图片通过它来给我们生成的,我们要把这个放一下,还有什么呢?还有一个叫做偷N口令的一个生成工具类。
04:18
嗯呃,还有这个叫做解析request中ton口令反向解析的一个,哎,工具类啊,还有什么MD5加密的一个工具类啊,我这个登录的时候呢,要进行一个密码的验证,而密码呢,我们并不是存一个铭文密码,而是存了一个密文密码,那密文密码怎么生成呢?啊,通过这个来进行转换就可以了,你给我一个铭文,我给你返回个密文是吧。还有JC响应结果格式的一个工具类,在这块呢,我们要定一个全局统一的一个什么呢?全局统一的一个响应结果叫做result,我们给浏览器响应数据的时候呢,不要说这个每个接口响的数据结构都不一样,呃我们要响应统一的把一个result对象呢,呃转成接算响应回去,这里面包含了呃这个响个码呀,例如200是成功了,404是找不到了,哎,想要的信息,Message返回的消息是什么?呃,这个真正的里面包含数据,用这个data这个属性来进行封装,然后这块准备了一个误参工作方法,这还准备了这样几个,嗯,只几个快捷的方法,一个叫build,它可以快捷的给我们构建一个造对象,造对象你把数据传过来,那就相当于什么呢?相当于呃,快捷的给我们构造了一个result对象,然后呢,并且把这个数据呢,把这个data,呃,Set到我们这个result对象之中,嗯,这还有一个build,可以放三个参数啊,还可以再传一个什么呃,Code,那这是一个枚举,这个枚举在下面哈,这个枚举里面就枚举到我们呃上面啊,这个code中可能会出现一些代码,也可能会出。
05:40
天加。显一码啊,通过它来处理的,呃,还有一个快捷方法,如果你这块直接用这个OK就直接创建了一个什么,呃,没有参数,呃这个没有结果,但是呢,呃这个呃这个响应的这个状态码是一个OK的一个状态码,这个叫做result code为success是吧?啊还有个file,直接是创建一个应失败信息的一个对象啊,嗯,还有是file里边也可以带data啊,然后等等一些,这这是专门set message的,这是set code的,这是is OK的它的一些get set方法啊,然后这个还有一个响应结果的一个枚举,那这些东西呢,我们先给它复制进来,复制进来之后呢,一一给大家解释一下啊。
06:19
这东西比较多,第一个是呃,Create verify code image这样的一个工具类,我们先把这个类呢给它创建好来,CTRLC复制一下,在我们这个项目里面,在这里U击新建一个class,名为它OK,把这个代码拿过来哈,这个过程呢,呃,这个都是放到U包下面的,我我把这个类呢一个一个的全复制过去啊,中间这个过程呢,你就就CTRLCCTRL粘过去就OK了啊,按照这个一个一个类全粘到U条L下面就OK了,这个过程呢,不给大家全都录制过来了哈,呃,这个我我放好之后一一给大家解释一下它里面的运作原理是什么啊。这个包下面这些工具类呢,我就已经准备好了,准备好之后一一给大家解释一下,这个分别都是干嘛的,我们先看这个MD5啊,这个是最简单的啊,呃,这里面只要给我一个字符串啊,给我一个密码。
07:08
它呢,这个方法就会转换,就会将这个字符串转换成一个密文的一个string,给我们返回啊,给我们返回啊,所以呢,这个其实就是将呃铭文转成密文的一个操作,后面在对比这个密码的时候呢,也是用密文来进行对比就OK了,所以可所以呢,封装这样一个方法,这是MD5加密,它加密呢,这里边是用了一些算法啊,包括一些微运算法,哎,他怎么处理的,这个咱们不关心啊,不关心你只要保证他这块能保证一个什么事呢?就是你给我的铭文是一样的,它给我们转化和的密文,它就会是一样的啊,我们看一下adin里面所存这个密码,哎,看这些密码,这些密码就是经过MD5进行转换之后所生成的一个密文,那你光看这些密文呢,肯定是不知道它这个原来的密码是啥的,而用户端在输入的时候呢,用户用户端在这里面输入这个密码的时候呢,它输的是铭文密码。那中间就要把这个铭文密码呢,转成什么呢?转成一个密文,然后再跟数据库里面的这个密码呢,去进行对比去,所以就需要这个来给我们进行一个转换啊。呃,先来看这个叫做create wi code image,这create,呃,Code create wiify image是干嘛的呢?现在打开我们这个页面这里边,呃,我们在演示的时候呢,这会有一个什么呢?验证码图片啊,验证码图片里面放的是数字和字母,但这块是一个图片啊,现在因为后端呢没有,呃,没有这个验证码功能的支持,还没有写,所以这块呢,就显示了一个井号,那我们写好之后呢,这块就可以真正显示一个图片了啊。
08:29
而这个图片是怎么产生的呢?这个图片就是它产生的create verify code image来产生的,这里面呢,调用这个叫做get verify code image就可以给我们返回一个啊图片对象啊叫做buffer的image,而这个buffer的image呢,就相当于什么呀,就相当于就相当于我们在内存上已经产生了一个图片,然后呢,通过I流再把这个图片响应个浏览器,那浏览器可以接收到这个图片并展示了啊并展示了哈,然后下面还有一个叫做呃,Get WiFi code,这是获取什么呀?这是获取当前图片上所显示的验证码啊,我们在页面上可能这块生成图片啊图片啊生成一个乱码,假设叫到一啊X啊什么二啊零啊Q,那么这个文字呢,我们需要用户啊在验证码这块输入,输完之后呢,传递给后端啊服务器,后端服务器拿到用户输入的验证码,他同时还要跟什么呢?跟真实的验证码进行对比,那真实的验证码后端还要进行获得的,那真实的验证码怎么获得呢?在这就可以获得了,你再调。
09:30
靠这个get very for code方法就可以知道上面这个get very code image这个图片。它上面的呃,这个文字是什么?它就直接以叉数组的形式来给我们返回了啊呃,这个是它私有的一些呃方法,内部生成一个验证码,然后下面这个什么,下面这应该是呃呃绘制验证码啊这个把这个验证码呢给它改一改字体啦,嗯等等一系列操作啊还有什么呃,设置验证码后面这些背景图片啦,哎,背景呃背景图片这些操作它用的是我们呃Java的这个a wt包里面的一些工具,给我们在内存上生成一个图片,然后返回就可以了,这是生成验证码需要的啊,这wt helper,这是生成token口令啊用的一些操作,这块给我们指定那个token的一个per,呃,Expiration,这是一个过期时间,24乘二六十乘60乘1000,这明显是一天嘛,对吧?嗯,这应该是1000,呃,1000毫秒等于一秒,一秒乘60,这是60秒,66秒乘60是60分钟,60分钟是24小时是吧,就一天的时间这块还有叫TOKEN3K,这是token呢,在我们原本的密码之上再加上一个呃信息。
10:36
啊,后缀,然后呢,你要是不知道这个信息呢,是没有办法对生成的token进行解密的啊,下面这个叫create token啊,你把用户的ID告诉我,再把用户的类型告诉我,那么就会根据用户的ID和类型,再结合上面这个呃头Ken的验证,验证的key啊,生成一个什么,生成一个密文啊,下面这个是get use ID啊,这是把token的字符串给我,它会把这个密文中放的这个用户ID的反向解析回来,然后以long的形式给我返回,这个是get use tab,也是把一个token的密文和密文放进来,它会把这个token解析好之后呢,把当前用户的类型给我们返回来啊,这是get use nameme也是把token拿过来,呃,可以从token中反向解析出当前用户的名字,哎,是什么?然后这玩意是判断token有没有过期,把一个token的一个呃字符串密码啊密文放进来,它判断当前这个嗯,Token有没有超过什么,有没有超过,诶当前这个系统时间距离这个token获取的时候,到现在这个当前系统时间有没有经历过24小时,如果超。
11:36
超过了就给你返回一个false啊。这是refresh token,这是刷新token口令啊,刷新token的这个呃,字串啊,下面这是一个主方法进行测试,这个呢可以上,没什么用啊。嗯,还有什么呢?还有叫做嗯这个东西叫做嗯,Upload file,这是文件上传的一个呃工具,呃后面呢,我们再进行文件上传,进行文件保存的时候呢,可以用这个里面的一些方法,那如果说不想用的话呢,也可以直接在controller中呢,直接自己编写也OK啊,所以这个是一个可选的一个工具类。
12:07
哦,All the contact holder这个玩意是干嘛的呢?这个玩意是在我们gwt helper之上再继续进行一个封装,简化的一个空具类,呃,你直接把request对象给他,他直接呢,就会从请求从中获取to改,然后返回us的一个ID,就是相当于对对这个方法,对这个呃,G wt helper这个东西再进行一个再封装啊,然后这块还有一个就是get username,也是在这个这道题help里面再进行个再封装,你要是直接调这什么,直接调这个,呃,Get user哪去了,Get username你需要手动去获得token,把这token传给他,那获得token这个过程呢,给封值到哪里呢?封住到这里了,所以呢,我们后面如果要是想获得这个当前登录的用户名,直接调这个方法就可以了,把request对象扔给他就可以了,就不需要我们再自己从request的对象中呢,再获取这个,哎投N的这个请求头,哎然然后再解析,这就省事了啊,下面还有一个比较有意思的个这个工具类叫做result类,这是一个什么呢?这是一个全局统一结果的一个封装类,我们后端的这个处理器在响应数据的时候。
13:08
很多很多的controller,很多很多的后端接口都要响应一些数据,但是想到数据呢,如果说是数据的格式没有一个统一的规范,没有一个统一规范,那么我们前端在接收数据的时候,那接收这个数据格式呢就会写得比较乱,前端代码呢也会写的比较乱,那怎么办呢?我们就定义一个公共的规范啊,是什么呢?是这个result,后端如无论响应任何数据,都会把这个数据装到result对象里面进行返回。你看,而这个返回对象里面一定要包含这样几个信息,第一个信息就是返回的什么返回的这个状态码啊,例如200,呃是OK啊,例如呃404啊是找不到资源或者是什么其他的这个返回码,那我们手动设置好这个code的对象的返回码,然后之后呢,再可以设置一下message,就是相应的信息啊,你到底要给前端返回什么信息啊,给这个属性附个值,然后前端就可以呃解析这个属性的值,然后进行展示了啊下面这个data非常重要,这个是真正封装数据的位置,我们后面可能会响应一个什么响应单独的一个呃额,Din对象。
14:07
如果是单独的一个adin对象啊,放到这个data上进行转换,有可能是一个类似的集合,这个类似集合呢啊,可能放的是一些class啊,有可能放的是一堆grade,那这个类似集合呢,也放到这个data上,至于你真实的想要的数据是什么啊,真实要让浏览器展示的数据是什么,告诉他数据是什么,全往这个data属性上去放。啊,那后端我们在任何一个ctrler响应数据的时候,其实都是把数据装到一个的对象里面进行返回,然后进行返回。呃,为了能够快捷的去获这个伪造对象,获取这个伪造对象,这里面还封装了一些快速构建伪造对象的一些方法啊,例如这个build的方法,我们这是一个静态方法,你只用这个result这个类来调它的这个build的方法,哎,就可以快速的你把这个data,把真正要型的数据往里一装,就可以快速的给我们封装一个result,就不需要我们自己去录result,然后呢,再去啊set我们这个code set message set data这些东西呢,就可以,就可以省点代码,省点代码啊下边呢,还有一个什么呢?还有一个这也是一个build,这里面要带上一个什么,带上数据和啊这个和一个什么东西呢,这个是要code,那这是一个想要状态码的一个枚举啊啊这是干嘛的呢?你看这啊,我要是记状态码200404或者其他状态码,状态码有很多呀,那我忘了,我你这个容易忘怎么办是吧?呃,在这块准备了一个状态码的一个枚举类,你点开这个枚举类里面,我们看看都有什么东西啊。
15:28
你看200哎,成功,201哎,失败,还有什么其他一些状态码,211啊,什么什么东西,记这些状态码,你可能会记得特别特别的,这个不好记,但是记前面这个名字,诶,它就比较容易成功了啊叫什么thank q and,这是秒杀结束,Thank q success,这是秒杀成功,还有这fair success哎,这是200,这是一个成功file,这是一个什么,这是一个201哎,失败,哎,这些状态码呢,就不用我们自己挨个去记了,我们只要从这个类中取出对应的枚举,然后再从枚举中取出这个状态码,给谁赋值呢?给我们这个result里面,哎,这个code赋值就可以了。
16:03
嗯,好。看看这边怎么写的,如果用这个build传一个枚举过来之后啊,他会给我们你有一个build的一个呃造对象,同时呢,会对这个造对象的这个code的编码进行设置,怎么设置呢?再从没取对象身上再去获取什么呀,再去获取对应的这个状态码,然后再从没取对象身上再去获取什么,获取对应的message给这个当前result,像这个message赋值就OK了。这还有一个OK方法,直接就是用result调下面这个OK,你看这个OK,这个调的是谁?嗯,这块调的OK是谁?是他,哎把什么呀,把这个data放进来,Data放进来之后呢,把数据放进来,呃,这个状态码呢,直接使用什么呀?直接使用呃,这个200,呃,Result code result code number为200,直接使用200就OK了。file是啥呢?File是得注意这块直接就给我使给我一个设置的数据,为什设它要的是这个下面这个file,直接把这个数据设置为now,设置为now之后呢,把我们当前这个状态码设置为什么是是叫做呃,Code引number为fail,诶设置为失败,失败就是201嘛,是吧,哎,这个是message的set方。
17:06
啊,这是code set的方法,这个是AOK,呃判断呢,呃判断是不是什么呢?判断呃是不是成功的一个状态码。你看相当于什么,相当于我们这块有一个有一个这样的一个private啊,Bo的一个,嗯,OK的一个属性啊,OK的一个属性,哎,然后呢,这个OK的属性啊,判断如果它要是一等于一个处,哎,等于个处就说明成功啊,如果说他要等于一个false,等于一个false就是失败,但这个属性不写也行,你只要保证当前,当前这个什么呢?当前这个result里边有针对于布尔类型属性它的一个get的方法,那么就相当于已经有这个属性了,就算是找属性的话,它也是通过这个OK找对应的get方法去,所以这块呢,这个属性就可以读写了,哎,直接写成这样一个is OK就OK了啊,它就会直接返回我们当前,呃,当前这个状态码,哎,如果状态码是success,哎,那么就返回一个true,如果当前状态码是不是success,那就给我们返回一个false,哎,好,整个的这个工具类封装就已经OK了,后面我们在想应数据的时候呢,就用这个工具来做统一的一个响应啊。
我来说两句