解决2次查询User的问题(ThreadLocal)
通过token进行了2次查询
一次是在拦截器中查询,一次是在Controller查询,存在性能和资源浪费问题。
如何将拦截器中的数据传递到Controller?
方案:
- 将User对象放置到request对象中
- 使用ThreadLocal实现
- 进入tomcat和产生响应前,都处于同一个线程中
package com.learn.web.interceptors;import com.learn.common.utils.CookieUtils;
import com.learn.sso.query.bean.User;
import com.learn.web.service.UserService;
import com.learn.web.threadlocal.UserThreadLocal;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class UserLoginHandlerInterceptorimplements HandlerInterceptor
{public static final String COOKIE_NAME = "TT_TOKEN";@Autowiredprivate UserService userService;public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{String loginUrl = this.userService.LEARN_SSO_URL + "/user/login.html";String token = CookieUtils.getCookieValue(request, "TT_TOKEN");if (StringUtils.isEmpty(token)){response.sendRedirect(loginUrl);return false;}User user = this.userService.queryByToken(token);if (null == user){response.sendRedirect(loginUrl);return false;}UserThreadLocal.set(user);return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception{}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception{UserThreadLocal.set(null);}
}
package com.learn.web.threadlocal;import com.learn.sso.query.bean.User;public class UserThreadLocal
{private static final ThreadLocal<User> LOCAL = new ThreadLocal();public static void set(User user){LOCAL.set(user);}public static User get() {return (User)LOCAL.get();}
}
解决2次查询User的问题(ThreadLocal)相关推荐
- php 数据库查询乱码,怎么解决php数据库查询乱码问题
怎么解决php数据库查询乱码问题,数据库,字符集,乱码,操作,简体中文 怎么解决php数据库查询乱码问题 易采站长站,站长之家为您整理了怎么解决php数据库查询乱码问题的相关内容. php数据库查询乱 ...
- 日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题
简介: 日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题 更多存储标杆案例 欢迎点击下方链接查看 阿里云存储标杆案例样板间 公司介绍 识货APP是虎扑体育旗下的导购应用,致力于为广大年轻 ...
- MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 参考文章: (1)MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 (2)https://www.cnblogs.com/lili ...
- php mysql查询中文乱码_解决php mysql查询插入中文乱码问题_PHP教程
解决php mysql查询插入中文乱码问题 一.中文问题其实就是经统一编码了否则就会乱码 1.数据库与php页面编码统一 2.数据库数据表字段与页面编码统一 如果做到上面两种就不存在中文乱码问题了,那 ...
- 如何解决数据关联查询
如何解决数据关联查询 在传统数据库查询时,如果要获取的字段在别的库表中,通常会使用join操作获得,但是当数据量越来越大时,join操作会使查询速度越来越慢,这显然是不可取的,那么我们该如何进行查询呢 ...
- mysql通配符查询 性能_使用mysql5.7新特性解决前通配符查询性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
- php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
一.中文问题其实就是经统一编码了否则就会乱码 1.数据库与php页面编码统一 2.数据库数据表字段与页面编码统一 如果做到上面两种就不存在中文乱码问题了,那么我们来看mysql中文乱码问题解决例子 1 ...
- sql查询分析器 只读_DRDS 只读实例来解决复杂 SQL 查询
转自: 复杂 SQL 查询跑不动?DRDS 只读实例来解决!segmentfault.com 背景 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储后,均会存在如后台运营类系 ...
- 头脑王者服务器维护,头脑王者请求超时怎么解决 头脑王者查询服务器失败怎么回事...
类型:社交聊天大小:2.3M语言:中文 评分:3.3 标签: 立即下载 微信自从更新升级后,小程序就更多,很多伙伴在头脑王者,这是一款知识竞赛的软件,最近有伙伴反映玩头脑王者的时候出现请求超时和查询服 ...
最新文章
- 两次结果的绝对差值_多图示例:如何呈现论文结果中的各种图表
- Paper:《How far are we from solving the 2D 3D Face Alignment problem? 》解读与翻译
- Python教程:列表推导式和嵌套的列表推导式讲解
- R学习笔记:文档间函数调用
- 201506251117_《react——所需知识、主要技术》
- 机器学习线性回归学习心得_机器学习中的线性回归
- Deployment descriptor
- 粗谈pragma once与 #ifndef的区别
- HDOJ 2046 骨牌铺方格 【递推】
- 手把手教你最好用的数据分析方法,会用的没几个
- HDU-5441-离线化并查集
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
- BusyBox 中添加新命令
- [云原生专题-3]:云平台 - 云计算平台快速入门
- 向上的路,从来都不好走(好文力荐)
- 【实习日记】实习第N天 从零开始搭建一个tiktok puppet(一)
- Win10 出现恢复,无法加载操作系统,关键系统驱动程序丢失或错误 蓝屏错误代码0xc000007b
- 车规级芯片、手机芯片、电脑芯片比较
- 数学之英文写作——基本中英文词汇(一般术语、算术与代数的常用词汇)
- python错误:TypeError: Cannot interpret ‘3‘ as a data type