login_ticket的结构,其中ticket是重要的
status 0表示有效,1表示过期
新建LoginTicket的实体类
Dao层的mapper
注入一个字符串,返回一个LoginTicket实体类
LoginTicket selectByTicket(String ticket);
向数据库插入一个loginTicket实体类,
int insertLoginTicket(LoginTicket loginTicket);
当用户退出或者过期时,将ticket的状态改为不激活
int updateStatus(String ticket, int status);
用注解方式写sql语句
自动生成主键
mappertest测试
成功插入
测试select和update
成功
service层写用户登录的逻辑
处理空值
验证账号是否不存在,或者账号未激活
验证密码,注意md5只要输入的值一样,结果也一样
数据库中存的是md5计算后的密码
实例化loginticket,并放入mapper
Util的constant接口设置两个expired time,一个一般的,一个勾选记住我的
注入配置中的context-path
检查验证码是否和session中存的一样
如果验证码为空,或者传入比较的code为空,或者验证码不等于code,则输出 “验证码不对”,并跳转登录页面
定义失效时间,以是否勾选remmeber me为准
检查账号,密码,调用service层的登录
修改login.html,requestmapping会去controller查找,会调用/login 的post方法
给username,password等取name,要和controller里的方法的参数名一致
验证码
记住我
处理登陆失败后,param是Thymeleaf的处理方式,可以获取原方法的参数
处理密码
处理记住我
处理登录失败后的页面显示
账号不对,取决于usernameMsg是否为空
同理,处理密码
处理验证码
controller的codeMsg和下面的UsernameMsg和PasswordMsg
测试登录页面
输出正确验证码后
输入正确验证码和账号,成功跳转
loginticket里
业务层,传ticket,设置账户状态为1(即退出)
设置退出路径
测试退出登录
可以看到status变为1,成功