00:00
接下来我们来编写登录功能,首先我们来编写最简单的登录,使用我们的用户名或者我们之前注册的手机号作为账号,再填入我们之前的密码,点击登录,我就登录成功,那登录成功呢,我们默认都给它跳到我们这个商城的首页,那就是这一块的页面来看一下,好,那就是它,我们接下来来写这个登录,首先我们来看这个页面,页面呢会提交两个数据,我们的账号以及密码,那这个账号呢,我们在这儿来写一个VO,专门来准备收集这两个数据,我们就在user login,我们的VO,好,我们现在是登录用的这个VO,它呢需要两个数据,第一个是登录,登录的账号我们就叫log account,好,第二个呢,我们就叫密码private string password,然后我们让它生成get set方法来写一个an data。接下来我们来到登录页面。那就要提交这两个数据,好,在这来找一下,首先来看我们的第一个位置,来看这个音input的框,The plans hold,好,我们来找一下第一个位置。
01:09
那第一个位置呢,在这这个呢是我们提交的登录账号,那么name呢,就来写跟我们这个VI一样的这个名字,好,这是我们的账号,同样的密码,我们来写一个name,那就跟我们这个VO一样的名字,这个呢就是我们的密码,然后我们整个表单,那我们来点击登录的时候来看。下边呢,有一个登录按钮,我们来找一下,在这一块这一块呢有一个登录按钮,当我们点击这个登录按钮的时候,我要提交表单,我们就来搜索一下这个登录按钮,我们来搜索一下它的这个登字,好,那登录按钮呢在这儿,然后呢,我们就要点击它来提交表单,但是我们来看这个登录按钮,它在这个button里边放着,那这个button呢,应该是一个submit。要整个提交我们的表单,但是这一块呢,没有表单,我们就可以给这儿来写一个表单,我们将这个ul全部来包在我们的form里边,好,这是我们的表单,我们将ul都放里边,Crl all我们来代码整理一下,然后这个form的action地址,那登录地址呢,我们假设给我们的controltrler里边有一个登录请求public,来写一个string,因为我们要返回页面,所以我来写一个string,就叫log,这是我们的登录请求,最终我们return一个页面地址,好登录要提交账号密码,我们就让他用post请求post map,那我们就叫login。
02:39
然后呢,我们需要提交页面的两个数据,这两个数据呢,我们都在这个log VO里边封装着,而且这两个数据由于我们页面提交的不是杰森,就是表单的KV,所以呢,我们也不用写在这,也不能写我们的这个request body注解,因为我们提交的是KV,不是我们的杰森数据,好,我们这个登录完了以后,肯定我们要进行远程登录,呃,我们真正的登录我们要发给远程进行登录,那登录完了以后呢,我们还是重定向来写一个重定向,重定向到我们的整个商城的首页,那商城的首页地址,那就我们加上这个前缀,把它去掉就行了。
03:19
好,接下来我们来写这个登录,登录我们来的安克地址,那就是提交给我们的login,我专门有一个login请求,然后呢,它的请求方式是method,等于post来写上,那接下来当我们来点击这个登录按钮以后,那这个button它呢就应该是一个type等于submit,这是一个提交按钮,来点击它,我们这个表单就来进行提交,好,我先来CTRLF9把我们这个代码重新来编一下,来看这个log controlr了。那要真正来登录,我们先看能不能来到这儿,我来给这儿打上一个断点,我们同样将我们这个author服务呢,以debug模式我们来启动起来,那我们现在先来看我们这个页面提交来的数据,我们能不能收到,那如果能收到,我们接下来调用远程登录就行了,所我们接下来要做的就是给远程的方法来写一个登录功能。
04:12
登录呢,首先是页面提交了账号密码,然后我们在这儿来进行匹配就行。好,我们先来测试,我们将控制台清空,我们在这儿来填写一个账号密码,先来随便填,好我来点击登录功能,当然这个页面我们先来刷新一下,我们在这来填一下账号密码,随便填一个,好,我来点击登录,我们先来看我们的debug这一块。现在呢,没有进来,我们这一块呢,断点虽然打了没有进来,那没有进来呢,就是我们这个登录页在这儿的问题,我们来点击登录的时候呢,它跳到了一个别的地方,这个呢叫class a,我们把这个class先去掉,那点击这个登录应该是一个submit,提交到我们指定的这个表单位置log方法好,CTRLF9页面刷新一下。
05:01
好,我们现在来撤回,我们来重新来刷新,来刷新我们这个页面。我们的这个登录按钮,我们先来确认一下它的这个跳转地址,好,这是一个A标签,然后呢,它type submit,然后我们来写一个AA,走,来点击登录,来登录以后呢,来到我们的这个方法,我们来看这个VOVO里边封装的这个数据,账号密码已经有了,那我们就没问题了,好,我们来给它放行,那只要登录成功,就应该来到我们的首页,好,我们先退回去,那么现在呢,这一块数据我们来收到,收到接下来我们来发送远程的登录请求,来远程我们希望有一个方法,这是注册,接下来再来写一个登录,好public还是一个R,来写一个login,我们这个登录呢,由于我们这个远程服务,我们都是以杰森的方式HTP加传Jason的数据,所以我们这一块呢,先来写一个r.OK我们给它传入我们的杰S,而我们会提交账号密码这两个信息在我们这个user login这个VO里边封装。这,但是这。
06:07
的VO呢,在O服务里边,那么就应该给member服务也写一个跟他一模一样的VO,那么现在呢,就叫member的Logan VO,在这呢就叫member Logan VO,那这个VO呢,就是封装别人给我们提交过来的数据,那们在这个Logan VO里边,把这两个数据放在这,然后呢们来写一个at data,把它生成get set方法在controller里边,好,我们来写一个登录请求,我们来一定标上request body,哎,这时候代表。前面呢,给我们会传一个杰森数据,我们把这个杰森数据呢,封装成我们这个member Logan VO这个对象,好把这个VO拿到以后,我们希望有一个service给我们来进行登录,那我们就是member来给我们来进行登录,点一个login方法登录呢,将我们的VO数据,主要是账号密码我们传过来,然后等真正登录成功,我们应该将用户的信息,我们将他的整个member实体类member entity,我们都给它返回,这是我们的登录功能。好,我在这儿先来写一个,它要处理一个请求,Post map处理的请求呢,也叫login,然后我们接下来编写这个login方法走创建出来。
07:24
好这个登录,那登录成功呢,我们来创建出来,我们添加上这个实现,好这个实现我们接下来在这儿,那这一块要进行登录,那就是去数据库按照账号密码查,账号呢是我们提交过来的login account,而密码呢是我们的这个123456,但是我们这个密码加密的这个方式,我们是用这个be cooperate,我们的这个password encounter用它加密的,它有一个随机延值,所以我们要进行密码匹配的话,它这一块呢,有一个方法叫matchs,那相当于我们只能先去数据库查到我们这个用户,然后看用户的这个密码跟我们这个匹配不匹配,而不能说我们跟MD5一样,把密码拿到直接再算一次MD5,然后把这个密码跟账号同时提交给数据库进行对比,因为我们这个密码呢,没法再给它生成一个跟以前一模一样的,好,那现在呢,我们就来先做到第一步去数据。
08:24
库查询,去去我们的数据库查询,那这个查询呢,我们就应该调用它的do,我们把这个do拿到我们查询条件应该是这样子的,我们提交的这个有可能是用户名,也有可能是手机号,我们使用这两个给他进行登录邮箱我们就可以不用了,那只要是他的用户名或者手机号等于我们提交的都行,所以呢,我们在这儿的SQ语句应该是select芯。好,我们来写上select,先来查询,查询什么呢?From我们这张表,先从我们这张表里边查,条件呢是我们的用户名username等于指定的值,或者我们的密密码,诶这个不是密码,是我们的这个手机号等于指定的值就行了,我们根据用户名或手机号,因为这两个是唯一的,我们在注册的时候都检查了,唯一我们只能查出一个用户,或者查不出,那我们查出的这个用户,我们再来进行密码匹配,看页面提交的密码跟我们数据库的密码是否一样,好,我们SQL语句呢,就准备这样来做,那我们就来调用我们的这个方法,Member deal点,那们现在呢,想要查询,我们就来查一个,查一个就是select one,我们来看有没有一个select one,好,Select one,那就是查询单个,你有一个corry upper,我们的查询条件好,Corry upper里边我们查是会员,我们就叫member nity,这是这个然点一个E口。
09:55
Eo呢,我们是按照这个来进行查询,按照我们的用户名,用户名等于我们指定的这个值,Login account,或者关键我们还有一个或者条件,所以我们继续点一个O,或者我们来连接上一个条件,或者什么呢?或者我们另外一列,那么这呢还有一个叫手机号,手机号等于我们指定的值,这就是我们按照用户名或者手机号登录都行,好或者手机号也是我们的这个登录账号,只要它两个任何一个匹配,那都算查出来,好,这是我们的corrywaer,最终根据这个条件,我们会返回单个的member entity实体类,当我们得判断,如果说这个实体类等等于no,它是空的,那说明我们就是登录失败,我们用户里边数据库里边都没有这个人,那就登录失败,登录失败我们就直接给他返回为空就行了,那。
10:56
否则那就是我们还要判断是否登录成功,因为我们只是把这个人查出来了,密码跟页面提交的这个密码是否一样呢?因为我们从数据库查到的这个东西,我们肯定会封装password字段,所以拿到数据库的password字段,这个呢是数据库的们get password,这是获取到数据库的password字段,好获取到数据库,获取到我们这个数据库的咱们这个password,我们就叫password DB,然后呢,我们再跟页面的password在这儿我们要进行一个对比,看它是否成功,那页面呢,提交过来肯定如果我们提交123456,那就是123456,那数据库呢,却是一个加密的字段,是这么一串值,那怎么对比,还是要用我们之前的这个password ino,好,我们就拿过来new一个,我们叫ecor,我们的这个password ino好。
11:55
我们拿到这个password引include的,然后呢,我们来调用它的一个方法,这个方法呢叫matches来进行匹配,匹配呢前面传一个铭文密码,后面传一个编码后的密码,那铭文密码那就是我们页面提交来的,这是铭文密码,然后编码后的密码,那就是数据库里边存的密文密码,好把这两个密码呢,它会返回一个触货false是否进行匹配,在这呢,就是第二步进行密码匹配。
12:25
因为我们用的是咱们的这个be cooperate,我们的这种加密方式,好我们匹配成功,们在这就必须判断,如果说我们这个匹配成功,那匹配成功那就是登录成功,登录成功我就把当前的用户返回过去,这是我们当前数据库查出来的用户,如果登录失败,那同样给它返回空,只要我们接收到一个空的返回,那就是登录失败,好,我们这一块呢,都有返回了,我们的这一块我就不用写了,好这是我们的登录功能,最简单的登录,主要呢,在这进行一个密码匹配,然后我们来到我们的CTRL,那在这一块登录,这会拿到这个实体类F来判断,如果这个实体类不等于空,那就是登录成功,登录成功我们就给它返回r.OK那这就是一切成功了,如果是失败,我们就来返回,登录失败我们就应该返回的是error,好来写一个error那错误。
13:25
的这个状态码,那我们就是登录失败,用户名或密码错误,所有的业务的这些状态码我们全部抽取在了。com里边,我们来找这个base code,好在这一块呢,我们来找一下。跟用户有关的,那都在这儿,好,那么就叫用户名或密码错误,账号或密码错,那我们就叫这个账号login count,或者我们的这个password。In valid。好,我们就叫账号密码错误,我们也不告诉他到底是账号错了还是密码错了,反正就是填错了账号密码错误,好,然后呢,接下来我们就在这来返回我们的这个错误消息,这个消息base code,点一个我们现在是一个账号密码错误,叫log account或者password,这个错误消息点一个get code,好,错误消息的内容base code,我们的这个内容呢,就是它点一个get message,我们会将这个错误消息放到我们的这个message里边,诶我们放到message里边,那正好我们之前的这个注册,那这个出现错误以后,我们会将错误消息最终还要远程提取过来,我们之前呢,提取的是空的,我们可以现在给他拿一下,们之前提取的是错的,我们提取的是data数据,但实际上在这一块呢,我们提取的是这个message数据,我们之前呢没有写这个,它提取的是data,所。
14:58
呢,拿到的是空,然后呢,我们在这让它提取一个message。
15:04
错误消息我们都在这儿放着,好,现在我们来到我们的这个member controller,我们的整个登录就做完了,那登录成了以后,我们告诉他登录成功失败以后呢,我们并且告诉他的失败的错误码,那来到我们的author服务,来到我们author服务以后呢,来看一下我们author服务在这在这呢,我们要进行一个登录,那这一块的登录我们肯定要调用远程的登录方法,把这一块来说一下。好,这块登录我们要调用远程登录,远程登录呢,是我们的这个member phone service它来处理的,然后它来处理的话呢,我们就来将远程的整个登录方法的签名,我直接拿过来,CTRLC,好,我们在这儿来复制过来。然后呢,我们把这个public删掉,远程的这个登录方法。
16:01
是这个member log,诶我们复制错了,是这个我们member的这个logo,当然它的这个member log呢,我们即使是复制过来它的整个全路径也不对,所以我们把这个全路径来找一下,全路径呢,必须来加上它的这个member member,好把这两个加上。这是它的全路径,然后呢,我们是提交的杰森数据,所以我们加了request body,那我们这一块呢,就应该是user,我们有对应的一个VO叫user log VO,好,我们这个呢是传的接森数据没问题,但是我们这个login controller,这没加request body,这是由于我们第一个请求是接的页面的是传的KV表单KV,然后呢,我们调用远程的时候呢,要把它转为杰森,所以呢我们远程服务这是整为杰森的request body,好,那么就在这来调用我们的远程服务member phone service有一个log方法将我们的VO提取过来,最终呢,人家会返回一个R对象来判断一下,如果r.get我们这有一个叫code,好,那这个R指的是这个login,好,Login点一个get code,如果它的这个code等等零,只要是成功都是零,然后呢,那我们这个就是成功,否则呢,那就是个。
17:21
有个的失败错误了,那么现在呢,只要是成功,我们都返回我们的首页,只要是失败,我们就给他重新定向到登录页,告诉他账号密码错了,好,Log author它的这个com填一个login.htm,二好,我们登录页的地址,因为我们之前在这做了映射,登录页的地址叫log htm Mr,好,没问题,然后呢,接下来我们在这登录失败了,我们就去登录页,那登录页呢,我们还可以放错误消息,如果因为我们这一块是重定向的,所以我们可以使用redirect attributes来进行错误消息的放,那这一块放错误消息它是利用session原理,好我们先来按一个flash attribute,所有的页面错误我们就都叫errors,将所有的错误消息,无论是多个还是单个,我们全部封装到map里边,也比较方便,以后这个呢,这就是我们的规定了,好,我们来写一个map,就叫string。
18:21
针好,我们就叫arows,我们放到这个as,错误消息我们都放到这个map里边,哈希map好,我们有一个哈息map,然后呢,它里边放的第一个错误消息errors里边put一个,比如我们就叫message,那这个错误消息的内容,那么就直接从R里边获取出来就行了么?这个login里边远程给我们返回的这个错误内容是什么,那就是什么,那就直接调用它的方法叫get data,这data呢,我们用的是key,我们用的叫message,那值呢,我们就叫new,一个type reference,我们是string类型,就是一个字符串提示好来写一个string类型,然后呢,我们给它来写上一个这个匿名事现好,这是我们给里边放的错误消息,那来到我们这个logn页了,只要有我们这个message,那我们就来显示一下,顺便来到login页面。logn页面。
19:21
啊,我们就给它显示在这个用户名邮箱它的这个上边,那这个上边呢,我们给表单这一块,我们给他的最上边,我发现呢,这有一个AR,这叫请输入账号和密码来看一下是不是这一块的。这一块呢,请输入账号和密码,这个账户登录里边,那好我们就给他这吧,Ul里边,Ul里边呢,我们给他前边来写一个div,来专门来写我们的错误消息,我们来加上样式color red,好,是一个红颜色的,我们就来写一个样式红颜色的,那么的错误消息我们就来取出来th test,那想出取错误消息呢,那么就应该是Dollar符大括号们里边呢,会放一个arrows,而且呢,我们得判断这个arrows不为空,我们才能取,把这个simli的名称空间我们也来加上,在这儿THY,我们的这个前缀好加上加上,那我们在这来取test啊,或者我们在这直接来判断th if,如果我们这个Dollar福大括号arrows arrows,那么这个arrows它不是空的。
20:30
我们SIM Le呢,有一个集合判断,判断它里边不为空,我们来看我们之前的注册页里边就叫maps contains key,比如说我们先来判断aris不为空,再来判断它有没有我们这个错误消息,我就直接将这一块内容复制过来,来到我们的login,这来取出来就行了,走如果我们有错误消息,并且错误消息里边有message,我就取出来进行显示,好,那们这一块登录我们就写完了,这一块登录我们来看一下,这是我们的。
21:01
页面提交的登录功能,那真正的登录我们调用了远程的方法登录成与BY,我们这都有相应的处理,那么将接下来将我们的authorc服务以及我们的远程的member服务,现在呢全部重启,重启以后我来做一个测试,他们的整个登录能不能成功,好我们把其他的关掉,现在我们是这个登录来测试一下,我们提交一个账号啊,我们先随便填一个密码呢,随便填一个这是我们的错误信息,好我来点击登录,那这一块呢,提示我们这个读取超时,因为我们这个是远程调用,第一次调用我们这个服务呢,肯定是超时的,好,那我们就退回去,来重新来一次,好,然后呢,随便提交一个错误的来点击登录,然这一块提示我们这个模板simli的这个渲染有问题,什么这个login页面,那现在回到了login页面,说明我们这个登录错误了,登录错误呢,他来说这个log页面的这个errorrows message,那么这个表达式出现了错误。我们来看一下我们的这。
22:02
的as,如果我们一切登录的是错误的情况下,我们来看一下我们的这个login controller,如果远程服务成功,那就直接来到这,当然我们现在是错误了,错误了,我们来整一个aros。然后呢,获取到它的这个message内容,我们将它放到了我们的这个arrows这个map的message属性里边,然后我们将整个arrows,对我将整个arrows呢要放到我们这个attribute里边,我们现在呢,给它里边放的是空的,好,我们现在重新来启动一下,我们再来这儿进行一个测试,我们现在来重新来访问我们的登录页。好,我们在这儿来写一个登录,那先来写一个错的,随便写一个,这个肯定呢不对,我来点击登录好,登录以后呢,我们现在又跳回登录页,那跳回登录页说明我们这个是登录错误,错误呢在这儿就会显示我们的错误信息,账号密码错误,那这一块样式我们就不管了,现在我们来写一个正确的,那正确的们来填一个我们的首机号,然后呢的密码是123456,那如果正确呢,就会访问我们的首页来点击登录好,我们发现呢一些正确,我们访问了首页,那说明我们的登录成功,那这登录成功以后呢,在这就应该显示我们的这一块登录信息,这块登录信息要显示谁谁谁登录成功,那这一块呢,我们暂时先不进行处理,我们再来说完其他的各种登录手段以后,我们在这儿才有一个统一的处理。
我来说两句