00:00
先接着这个咱们这个登录啊,来看一看咱们现在这个需求,今天咱们这个登录啊,至少至少得这个一上午的这个时间啊,啊,咱们要搭的这个东西比较多啊。啊。来咱们这个CRM啊,还是访问进来了对吧,那今天上午要做的一个什么呢?你输入的这个账号和密码。这个账号和密码这个啊,输入完之后,我现在点击啊,这个最长的这个登录这个按钮,那这个按钮点完之后呢,我们肯定是要去做一个这个验证登录的操作,对吧。那么我们验证登录成功了,那肯定是跳转到我们现在的这个欢迎页,对吧?好,如果失败了呢。是不是应该展现一条这个错误信息啊,对不对,这个错误信息啊,如果是以弹框的形式来呈现的话啊,也就是说在中间弹个框啊,略显啊略显比较比较low,是这样吧,好,所以说呢,我们应该啊,在这个某一个位置啊,给它啊出现我们一个这个错误的提示。
01:14
好在哪出现比较好呢?在这儿啊,已经留下了一个空位,看到没?但是这个至于这个提示是什么,它一定是账号和密码错了吗。不一定吧。还有可能是什么?啊,有可能是账号失效了,还有可能是账号锁定了,还有可能是你的IP地址是受限了,是这样吧,啊这些东西咱们都得啊,如果一项不行的话,咱们都算是登录失败,OK吧,好,所以说呢,我们需要啊在此处显示一条这个错误信息,那么这个错误信息请问他应该是全局刷出来的,还应该是局部刷出来。它一定是局部刷出来的,是这样吗?也就是说我在点击登录按钮之后,如果我登录失败,应该在此处局部刷新出来一条信息,其他的页面组件保持不动,是这样吧,保持不动啊好,那如果是全局呢?大家想一想,我为了显示一条错误信息,我是不是整个页面还得重新刷一次,重整体闪一次。
02:26
对吧,这种用户体验啊非常差,而且走的流量还比较多,是这样吧,所以说就这种需求,我们肯定是使用这个啊局部刷新用户体验比较好,OK吧,好,那么咱们这个需求啊就分析到这儿,好那么接下来我们来看一看这个具体实现的这个手段,好我们看一看啊关于登录的部分,首先啊,咱们复习一下这一块啊,执行咱们这个SQL语句啊,去验证账号密码。这一步来讲,咱们肯定得过倒层嘛。do为什么要过倒层呢?同学们,Mac思想业务层在处理业务逻辑的时候,是不是遇到与数据库的交互就得过道层啊?
03:10
对吧,那下边这些步骤用不用过道层。不用,下边也是在处理登录的,验证登录的业务,但是呢,就不需要过数据库的,是这样吗?所以说只有第一步咱们需要过到层啊,因为接触到了数据库对吧?好,我们返回的是一个U的对象,而不是他的一个条数,为什么我要返这个U对象。因为我要从这个对象里边要取得一些其他验证的信息,是这样吗?好,分别取出我们的time啊,Lock state啊,以及咱们这个IPSOK,好,我们现在啊来看一看啊,使用的这种这个方式是什么呢?以后在这个业务层啊,在业务层在处理这个验证登录业务的时候,我们需要使用到的是一种这个自定义异常的方式,好,也就是说啊。
04:05
如果账号密码错了。啊,我往这个上一层controller控制器里边抛一个异常自定义常时候学过呀,对吧?哎,我可以手动的去啊,创建一个我自定义的异常,随时随时随处的往上抛,是这样吗?那么如果优对象为空的话,我可以往上面抛个异常。那上网上面抛异常异常的信息是什么呢。啊,账号密码错误,那上一层接收到这个异常之后,是不是处理我们的异常啊,哎,如果我一旦接收到异常说明什么同学们。哎,肯定是登录失败对不对,但是我根据这个错误的消息,我知道是哪错了对吧?那比如说啊,我在这儿啊,走这么一个流程,如果user对象为空,我往上边抛一个异常,是这样吗?哎,这个异常信息是账号密码错误,OK吧,好,上一层如果处理异常了,表示登录失败,把信息一拿到,是不是往前端的这块一打就行了。
05:10
对吧,那如果是time这个验证失效时间失败呢,那么我往上边跑,我自定异常是不是错误,消息提示的就是。哎,你的账号是不是已经失效了,对吧?好,那么我们现在啊,是可以设计成为为这个上一层抛出这个四种异常信息,是这样吗?分别是账号密码错误,账号已失效啊,账号已锁定以及IP地址受限了啊OK吧,好。我们在这儿啊,要多来一个。扭出来一个包啊,咱们来一个叫ex cep。Ton异常行吧,那这个异常呢,我们现在给它起一个名字啊,这是与我们登录相关的异常,比如说我管它叫log in e行吗?Exception啊好,自定义异常,来吧,Extend。
06:11
Exception是这样吗?好,我来一个这个代餐的这个构造方法啊,来log it exception我们来一个。Message,好,然后我们由这个super啊帮我们处理一下啊,OK了,而至于这个无产的这个构造方法,你可写可不写,OK吧,咱们现在写一个代餐的,是不是把那个无参的给覆盖掉了,对吧,那个无参的啊,咱不用啊,我就不写了,OK吧,好,那么。我们接下来啊,来看一看啊,对于这个账号密码的验证,对于这个时效时间的验证lock state啊,验证锁定状态IPS1项一项来看啊同学们首先啊,我们先来看第一个啊诶。User,哎,是不是我根据我查询一个这个搜后语句,我就能判断它这个为不为空,是这样吗?啊这一项啊过了,那接下来呢,从这个user对象中啊,取得time验证失效时间,那这个东西应该怎么验呢?
07:18
想想。等会我在这里边啊,我看看在这个测试包里,这个测试包里边其实啊,咱们用的都是那个解忧你的啊,但是我现在创建一个主方法,我先看看能不能用啊,那主方法使用起来这个简单一点啊。Com点北京power node点咱们来一个setting子点test啊。来一个主方法。
08:01
看看能能不能执行啊。不行,就得以后上那个解啊,能支行是吧?啊看来这个版本这个idea啊,这个东西它是支持的某些版本啊,它是不支持的,OK吧,好啊,既然他支持的话啊,那我们先来看一看啊,验证这个时效时间这一块啊。失效时间好,咱们这个失效时间呢,比如啊我来一个。Exp time,当然这个time我现在是写死的啊,那么我们肯定是不是都得从这个user对象里边去啊。对吧,啊,现在我先歇四了啊,2019年,比如说咱们来10月10号啊,10:10。十秒这数字标准的19位对不对?和谁比呢?和当前系统时间去比,是这样吗?好,那当前系统时间大家注意啊,咱们现在已经给它封装成了一个这个工具类啊,哎,这个工具我先不用啊,咱们来看一看如何把我当前系统实现也给它格式化成这种形式。
09:10
来date date new,是这样吗?诶点题对吧,好这块他没有给你自动导包,是因为我们两个包下都有这个date对吧,咱们要用哪个包呢。U条一定是U条包,OK吧,搜包以后咱不用啊U条包好,那么这个date,如果把这个date对象给它输出出来,它应该是个什么呢?其实他也能够看得出来是一个有效的这个。日期和时间是这样吗?哎,你看看啊,其实也是有效的啊,你看。是不是也是有效的好,但是呢,这个东西是不是得给它格式化成这种字符串的形式啊,用到的那个工具叫做。Simple data format值得注意的是,很多同学在未来这个笔试的时候,都拿这个simple data format啊当做成YouTube包相等,OK吧,那其实它哪个包呢?
10:10
T包OK吧,啊,是属于文本包的,这个这点需要注意了啊好。等于六出来一个simple data format,好,咱们来标准的格式,YYYYMMDDHHMMSS,好,来个SDF,掉一个点。啊,是不是这个form是吧,好,但是不用这这老多啊。你看这个idea就是idea讨厌的地方是吧。我直接把这个date啊给它传递过来,返回一个字符串,对吧。
11:01
看看对于这个字符串的这个输出啊。好,这是我们想要的这种结果,对吧?好,当前系统时间嘛,好,但是呢,每一次都这么写肯定会非常的麻烦,对吧?好,所以呢,来看看啊工序是不是就是为了干这个活呢?那咱们写了一个date time YouTube啊来看看关于日期和时间呢,你看是不是相当于我调这么一个方法,就直接把我当前系统时间以这样的格式的字符串给我返回了。好一模一样的啊,所以说我给他写一个这个简化版啊好。这个是我们的这个失效时间啊。好,下边咱们来一个当前系统时间。好。
12:00
Current time吧,行吧,等于什么?咱们那个工具叫data time对不对,Get可以吧,好二者之间啊进行一个相应的比较啊,怎么比呢?比字符串啊,通过字符串来比时间,是这样吗?好,先比第一位,再比第二位是啥吗?好,怎么弄,我先我先补一啊,time.compare to current。是这样吗?哎,给我返回回来一个什么类型。来来看看啊,Compare to是不是int类型啊啊,Int类型我们来输出一下啊,这个int啊。这个int我们主要观察的是什么呢?不是它的这个数值,我们主要观察的是什么呢?不是它数值的这个数,这个这个数字是多少,OK吧,而是观察它到底是大于零还是小于零,这个是我们需要观察的,OK吧,你别管它是三还是五。
13:09
总之它是大于零的,你别管它是负三还是负八,那么它是小于零的,OK吧,我们主要观察的是这个啊,来,S out can't扔进去,好,我们来看一看,走。行吧。一是吧,好,那比如说我现在来一个八月份呢。是不是也没失效啊?你别管他是他是什么。哎,反正是个正数,对大于零的对吧,好,那如果我来个二零。一八年呢。嗯,负一是这样吗?好,总之它是小于零的,我们是不是可以通过这种字符串的形式来判断有没有失效,对吧?行了,这个问题很简单啊,咱们过了好,接下来咱们来判定一下这个锁定,这个锁定状态啊。
14:17
嗯,来,咱们来个local。一代表什么?零代表什么?零代表锁定,一代表启用对不对?如果这个就是最简单的了,怎么弄说吧。衣服了。点什么?判断。真有这么写啊,同学。大家注意啊,一口子是没有问题的。问题在于什么呢?
15:02
问题在于local state这个变量要放到前面吗?如果它是个空的话呢,将来是不是上来一个空调一个点,方法是上来就空,指针异常啊,将来你记住啊,如果遇到判断字符串,一定要把常量放到前面。你这这这种小问题啊,如果你写写反了,就显得你水平太太太瓦了,OK吧,就这种小问题啊啊一定要注意了,如果零点什么E,这是不是绝对不会出现控制的异常,好,咱们来lock state这个说明什么,咱们给一个提示啊,是不是账号。已锁定,是这样吗?只不过呢,我们现在啊,是以这个控制台的形式给他输出出来的,对不对,好,那么我们以后呢,以后是不是往上抛异常,这个就是咱们的这个异常信息啊。
16:02
对吧。
我来说两句