开发登录 退出功能
访问登录页面
点击顶部区域内的链接,打开登录页面
登录
验证账号,密码,验证码。
成功时,生成登录凭证,发给客户端。
失败时,跳转返回登录页面。
退出
跳转至网站首页。
新建LoginTicket 实体类
新建LoginTicketMapper接口
Login Controller
//处理表单提交过来的数据用post
UserService
//登录
public Map<String, Object> login(String username, String password, int expiredSeconds) {
Map<String, Object> map = new HashMap<>();
// 空值处理
if (StringUtils.isBlank(username)) {
map.put("usernameMsg", "账号不能为空!");
return map;
}
if (StringUtils.isBlank(password)) {
map.put("passwordMsg", "密码不能为空!");
return map;
}
// 验证账号
User user = userMapper.selectByName(username);
if (user == null) {
map.put("usernameMsg", "该账号不存在!");
return map;
}
// 验证状态
if (user.getStatus() == 0) {
map.put("usernameMsg", "该账号未激活!");
return map;
}
// 验证密码
password = CommunityUtil.md5(password + user.getSalt());
if (!user.getPassword().equals(password)) {
map.put("passwordMsg", "密码不正确!");
return map;
}
// 生成登录凭证
LoginTicket loginTicket = new LoginTicket();
loginTicket.setUserId(user.getId());
loginTicket.setTicket(CommunityUtil.generateUUID());
loginTicket.setStatus(0);
//过期时间
loginTicket.setExpired(new Date(System.currentTimeMillis() + expiredSeconds * 1000));
loginTicketMapper.insertLoginTicket(loginTicket);
map.put("ticket", loginTicket.getTicket());
return map;
}
//登录退出
public void logout(String ticket) {
loginTicketMapper.updateStatus(ticket, 1);
}
测试结果:

显示登录信息
拦截器示例
低耦合度解决问题
定义拦截器,实现HandlerInterceptor(接口)
配置拦截器,为它指定拦截,排除的路径
拦截器应用
在请求开始时查询登录用户
在本次请求中持有用户数据
在模板视图上显示用户数据
在请求结束时清理用户数据
新建Interceptor包 新建AlphaInterceptor(拦截器)类
新建LoginTicketInterceptor类
//拦截器
新建WebMvcConfig配置拦截器类
//配置拦截器
新建CookieUtil
public class CookieUtil {
public static String getValue(HttpServletRequest request, String name) {
if (request == null || name == null) {
throw new IllegalArgumentException("参数为空!");
}
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
return cookie.getValue();
}
}
}
return null;
}
新建HostHolder
/**
* 持有用户信息,用于代替session对象.
*/
测试结果

账号设置
上传文件
请求:必须是Post请求
表单:enctype= "multipart/form-data"
spring MVC :通过Multi part File处理上传文件
开发步骤
访问账号设置页面
上传头像
获取头像
新建UserController
在index.html修改
<a class="dropdown-item text-center" th:href="@{/user/setting}">账号设置</a>
上传头像
获取头像
新建UserController
//账号设置