开发登录退出功能开发步骤

 

1.先写数据访问层

数据库的登录凭证表结构,看表结构,然后再想怎么存

ticket是核心数据 是一个随机字符串,不重复的,唯一标识

status 状态 0 正常 1 过期

登录成功时,生成登录凭证,发送给客户端,这样可以记录登录的状态,让状态能在多个请求中连续,这里需要用到cookie

我们生成的登录凭证,最终需要生成一个key发送给客户端,让他记住,下次再提交给服务端能够识别你,但是登录凭证中,包含一些敏感的数据用户id 用户名,甚至密码,如果这些数据不能发送给客户端,要存到服务端,我们可以用session来存,或者存到数据库里面,这边存到mysql中,后面重构存到redis中

(1)首先实现登录凭证

根据数据库字段写实体类LoginTicket,封装表中数据,再写增删改查的逻辑

在dao中创建LoginTicketMapper接口,写插入凭证方法,查询方法,修改凭证状态(退出的时候,凭证应该失效,即更改状态 )

查询的关键是依据ticket来查,整张表依据ticket来设计的,ticket是凭证,是核心数据,我们最终要把ticket字符串发送给浏览器,让他保存,其他数据是我们服务端自己要存一份,或者服务端在数据库里面存一份,客户端用cookie存储了这个数据后,他再次访问我服务器的时候,会把这个ticket给我,我可以用这个ticket查到整个数据,就可以知道是哪个用户在登录,哪个用户在访问。

所以我们这个查询是以ticket为条件的查询

接下来是实现这个方法

之间的方法都是在mapper下新建一个配置文件写sql

第二种方法是在接口当中写注解,通过注解去声明方法对应的sql

方法是 举例 插入数据

@Insert({" "," "," "}) 注解是括号里面花括号,然后一个个字符串拼成sql

在每一行字符串后面加一行空格,这样拼sql的时候,两个之间有空格断开,防止出现问题

然后values(#{  })   values里面写表达式,表达式引用的是对象中的参数属性,注意sql中的条件

第一个对应的是userId属性 (实体类中定义的)

 2.开发业务层

就要写支持登录的业务,登录的时候就要接收页面出入的条件,包括用户名,密码。。。

然后对账号密码进行验证,没有问题就成功了

还在UserService中写一个方法           返回值设置为map

(1)首先进行空值处理  账号,密码不为空

(2)合法性验证 先查库里账号有没有,如果有查看密码是否一致

 以上都对的话,就是登录成功,就要生成 登录凭证

创建一个loginTicket实体往库里面存储值,凭证是一个随机生成字符串

然后往里面设置值,然后用存到数据库中

loginTicketMapper.insertLoginTicket(loginTicket);

登录凭证已经生成成功了,我们就要把凭证放进去,最终发给客户端,可以放整个LoginTicket对象,也可以放ticket字符串也是可以的,浏览器只要记住key,下次再访问浏览器的时候,把凭证给我,我去库里找,找到了一条与之对应的数据,我去看状态对,时间也对,就认为是登录成功的,而且我通过ticket还可以找到user_id是谁

这个表的作用类似于session,但是我们这边是用表存的

3.有了这个业务逻辑,我们就可以编写表现层逻辑

首先得写controller 写方法处理页面的请求

登录界面的话,有个表单传入账号,密码,验证码三个值,很直观

 我们需要收到这三个值,然后提交给userservice做处理

收到值后,要么我们重定向到首页,要么错了之后,回到登录页面

controller 还在logincontroller页面中写

在后面增加一个能够处理这次请求的方法

(1)首先声明这次方法的请求路径,这里方法用的是POST,因为这是一个增加数据的行为,表单要提交数据给我,然后提交到库里面,根据表单提交方式不同,即使路径相同,也能区分开。

返回数据的时候,就要在方法里面把model也声明一下

页面传进来验证码,我们需要取到我们之前生成的验证码去比,用户打开页面生成的验证码放到哪里去了,放到了session里面,这个请求中,我们需要把验证码从session中取出来,因此会用到session,所以这里面把session申明好, HttpSession session,假如登录成功后,我们最终要把ticket发送给客户端,好让他保存,需要用cookie保存,所以创建cookie,还需要HttpServletResponse对象, HttpServletResponse response

 首先判断验证码是否正确,验证码不对,则账号密码就不用看了,验证码直接在表现层就能看出来,业务层不管,业务层只管业务逻辑,账号密码对不对

先看验证码 从session中取出验证码,将验证码与用户传的code相比

code是用户输入的验证码

检查账号,密码 

如果成功,重定向到首页,

登录成功的时候,把ticket取出来,发送给客户端,让客户端存,说白了就是给客户端发送一个cookie,带上这个ticket

先实例化一个cookie,他的key取名ticket  他的value是map.get("ticket").toString();

value就是我们从map中取到的一个结果,get的是一个对象,我们需要把他toString,因为cookie的key和value都必须是字符串才行

没有ticket,回到登录页面

 4.设置页面

login.html

发送请求的时候的设置

找到表单的位置,首先声明表单提交给谁,采用post方式提交,提交的路径@{/login}

每一个框上加上name,跟我们controller方法的 参数一致

账号,密码,验证码,记住我

当发生错误的时候的设置  错误信息的展现

首先账号,旧的值还在,就加value,从request取参数得到

错误提示的显示,死的改成动态的

退出功能

 业务层

加个退出的业务处理,将ticket改为无效

 控制层

加一个请求,处理页面的请求

返回路径/logout, get

 因为在页面上点击退出登录才触发退出登录,所以要配置好链接

 所有的链接都是在index中配置的,然后复用

路径改成logout 

到数据库看状态对不对

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值