最后
各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了
org.springframework.session
spring-session-data-redis
> 添加Redis配置
Redis配置
spring:
redis:
# 服务器地址
host: localhost
# 端口
port: 6379
# 数据库
database: 0
# 超时时间
connect-timeout: 10000ms
lettuce:
pool:
# 最大连接数
max-active: 8
# 最大连接阻塞等待时间 默认 -1
max-wait: 10000ms
# 最大空闲时间 默认8
max-idle: 200
# 最小空闲连接 默认8
min-idle: 5
> 业务逻辑实现
/**
* 登录功能
* @param loginVo
* @return
*/
@Override
public RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {
String username = loginVo.getUserName();
String password = loginVo.getPassword();
User user = userMapper.selectByUserName(username);
if (user == null){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
//判断密码是否正确
if (!MDUtils.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
//使用UUID生成字符串代替Cookie
String ticket = UUIDUtil.uuid();
request.getSession().setAttribute(ticket,user);
CookieUtil.setCookie(request,response,"userTicket",ticket);
return RespBean.success();
}
> 视图控制层
/**
* 跳转商品列表
* @param session
* @param model
* @return
*/
@RequestMapping("/toList")
public String toList(HttpSession session, Model model,@CookieValue("userTicket")String ticket){
if (StringUtils.isEmpty(ticket)){
return "login";
}
User user = (User) session.getAttribute(ticket);
if (user == null){
return "login";
}
model.addAttribute("user",user);
return "goodsList";
}
> 登录测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7af2c483bd844cdb2b1b923e01bddb1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rS-IOWkpyDmmJ8u,size_20,color_FFFFFF,t_70,g_se,x_16)
打开Redis管理软件发现Session信息已经添加到Redis中了
![在这里插入图片描述](https://img-blog.csdnimg.cn/b17261c99cf74643955b5f2680fc1806.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rS-IOWkpyDmmJ8u,size_20,color_FFFFFF,t_70,g_se,x_16)
##### []( )2\. Redis解决分布式Session
> 导入依赖
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
> Redis配置参考 【SpringSession - Redis解决分布式Session】
> 业务逻辑层
@Override
public RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {
String username = loginVo.getUserName();
String password = loginVo.getPassword();
User user = userMapper.selectByUserName(username);
if (user == null){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
//判断密码是否正确
if (!MDUtils.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
//成功Cookie
String ticket = UUIDUtil.uuid();
//将用户信息存入到redis中
redisTemplate.opsForValue().set("userTicket",ticket);
redisTemplate.opsForValue().set("user:"+ticket,user);
//request.getSession().setAttribute(ticket,user);
CookieUtil.setCookie(request,response,"userTicket",ticket);
return RespBean.success();
}
/**
* 根据cookie获取cookie
* @param ticket
* @return
*/
@Override
public User getUserByByCookie(String ticket,HttpServletRequest request,HttpServletResponse response) {
if (StringUtils.isEmpty(ticket)){
return null;
}
User user = (User) redisTemplate.opsForValue().get("user:" + ticket);
if (user == null){
CookieUtil.setCookie(request,response,"userTicket",ticket);
}
return user;
}
> 视图控制层
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!
来越大。
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!
[外链图片转存中…(img-rnMZvBQK-1715678055116)]