通过token进行了2次查询

一次是在拦截器中查询,一次是在Controller查询,存在性能和资源浪费问题。

如何将拦截器中的数据传递到Controller?

方案:

  1. 将User对象放置到request对象中
  2. 使用ThreadLocal实现
    1. 进入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)相关推荐

  1. php 数据库查询乱码,怎么解决php数据库查询乱码问题

    怎么解决php数据库查询乱码问题,数据库,字符集,乱码,操作,简体中文 怎么解决php数据库查询乱码问题 易采站长站,站长之家为您整理了怎么解决php数据库查询乱码问题的相关内容. php数据库查询乱 ...

  2. 日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题

    简介: 日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题 更多存储标杆案例 欢迎点击下方链接查看 阿里云存储标杆案例样板间 公司介绍 识货APP是虎扑体育旗下的导购应用,致力于为广大年轻 ...

  3. MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题

    MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 参考文章: (1)MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题 (2)https://www.cnblogs.com/lili ...

  4. php mysql查询中文乱码_解决php mysql查询插入中文乱码问题_PHP教程

    解决php mysql查询插入中文乱码问题 一.中文问题其实就是经统一编码了否则就会乱码 1.数据库与php页面编码统一 2.数据库数据表字段与页面编码统一 如果做到上面两种就不存在中文乱码问题了,那 ...

  5. 如何解决数据关联查询

    如何解决数据关联查询 在传统数据库查询时,如果要获取的字段在别的库表中,通常会使用join操作获得,但是当数据量越来越大时,join操作会使查询速度越来越慢,这显然是不可取的,那么我们该如何进行查询呢 ...

  6. mysql通配符查询 性能_使用mysql5.7新特性解决前通配符查询性能问题

    众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...

  7. php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题

    一.中文问题其实就是经统一编码了否则就会乱码 1.数据库与php页面编码统一 2.数据库数据表字段与页面编码统一 如果做到上面两种就不存在中文乱码问题了,那么我们来看mysql中文乱码问题解决例子 1 ...

  8. sql查询分析器 只读_DRDS 只读实例来解决复杂 SQL 查询

    转自: 复杂 SQL 查询跑不动?DRDS 只读实例来解决!​segmentfault.com 背景 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储后,均会存在如后台运营类系 ...

  9. 头脑王者服务器维护,头脑王者请求超时怎么解决 头脑王者查询服务器失败怎么回事...

    类型:社交聊天大小:2.3M语言:中文 评分:3.3 标签: 立即下载 微信自从更新升级后,小程序就更多,很多伙伴在头脑王者,这是一款知识竞赛的软件,最近有伙伴反映玩头脑王者的时候出现请求超时和查询服 ...

最新文章

  1. 两次结果的绝对差值_多图示例:如何呈现论文结果中的各种图表
  2. Paper:《How far are we from solving the 2D 3D Face Alignment problem? 》解读与翻译
  3. Python教程:列表推导式和嵌套的列表推导式讲解
  4. R学习笔记:文档间函数调用
  5. 201506251117_《react——所需知识、主要技术》
  6. 机器学习线性回归学习心得_机器学习中的线性回归
  7. Deployment descriptor
  8. 粗谈pragma once与 #ifndef的区别
  9. HDOJ 2046 骨牌铺方格 【递推】
  10. 手把手教你最好用的数据分析方法,会用的没几个
  11. HDU-5441-离线化并查集
  12. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
  13. BusyBox 中添加新命令
  14. [云原生专题-3]:云平台 - 云计算平台快速入门
  15. 向上的路,从来都不好走(好文力荐)
  16. 【实习日记】实习第N天 从零开始搭建一个tiktok puppet(一)
  17. Win10 出现恢复,无法加载操作系统,关键系统驱动程序丢失或错误 蓝屏错误代码0xc000007b
  18. 车规级芯片、手机芯片、电脑芯片比较
  19. 数学之英文写作——基本中英文词汇(一般术语、算术与代数的常用词汇)
  20. python错误:TypeError: Cannot interpret ‘3‘ as a data type

热门文章

  1. PROC系列之---/proc/pid/stat
  2. html的!DOCTYPE标签初窥
  3. 【Xamarin开发 Android 系列 12】 创建一个Json读取数据应用-添加定位服务
  4. Zigbee 获取设备地址信息
  5. NHibernate 对分组聚合支持的不好
  6. 为什么大部分程序员看不起PHP这门语言?
  7. Multidex实现简要分析
  8. am335x 打开内部 RTC
  9. 使用C#删除一个字符串数组中的空字符串
  10. Ticker View