ThreadLocal使用 --用于保存每个登录用户的信息-userInfo

2023-11-07

 

有时我们需要知道每个用户的登录信息,一般我们是将登录的用户信息是保存在session范围内,而我们在DAO中要是使用用户的某些信息,比哪录录ID,单位ID之类的信息进行过滤时,需要从从control 层传到

sevice层,再传到DAO层,比较麻烦。所以我们利用threadLocal 类来解决这方案,做到在任何类中可以直接得到session中的类型,具体实现思路是:用threadLocal 来保存userInfo的信息,在需要使用的类中只需要  new LocalThreadBean().getUserInfo()就可以得到用户登录信息了。

首先建立一个bean:

 

/**
 *〖文件名〗:  LocalThreadBean .java<br>
 *〖功能模块〗:XXX系统<br>
 *〖目的〗:       <br>
 *〖开发者〗:   <br>
 *〖创建日期〗: 2009-7-28<br>
 *〖版本〗:     1.00<br>
 *〖版权信息〗:XXXX<br>
 *〖更改记录〗: 更改时间、更改人、更改原因、更改内容<br>
 */
package com.ygsoft.util;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;

import com.jframe.mf.model.UserInfo;

public class LocalThreadBean implements Serializable{
    private static ThreadLocal<Object> threadLocal = new ThreadLocal<Object>();

    public HttpServletRequest getContext(){
    return (HttpServletRequest)threadLocal.get();
    }
    public void setContext(HttpServletRequest request){
    threadLocal.set(request);
    }

    public void cleanContext(){
    threadLocal.set(null);
    }
    public UserInfo getUserInfo()
    {
 return (UserInfo)this.getContext().getSession().getAttribute("UserData");
    }
    }
然后在系统的过滤器中配置下:

package com.jframe.http;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ygsoft.basic.dao.HibernateDaoSupport;
import com.ygsoft.util.LocalThreadBean;

public class EncodingFilter
    implements Filter
{

    private FilterConfig config;
    private String targetEncoding;
    private LocalThreadBean localThreadBean;
    public EncodingFilter()
    {
        config = null;
        targetEncoding = "GB18030";
        localThreadBean =new LocalThreadBean();

    }

    public void init(FilterConfig config)
        throws ServletException
    {
        this.config = config;
        try
        {
            String temp = config.getInitParameter("encoding");
            if(temp != null)
                targetEncoding = temp;
        }
        catch(Exception exception) { }
    }

    public void destroy()
    {
        config = null;
        targetEncoding = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {
        HttpServletRequest hreq = (HttpServletRequest)request;
        HttpServletResponse hres = (HttpServletResponse)response;
        request.setCharacterEncoding(targetEncoding);
        chain.doFilter(request, response);
        LocalThreadBean.setContext((HttpServletRequest)request);

//      关闭遗漏的 Session
        HibernateDaoSupport.closeSessionList();
    }
}
当然,还需要在web.xml中加上此过滤bean了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThreadLocal使用 --用于保存每个登录用户的信息-userInfo 的相关文章

随机推荐

  • C++ 线程局部变量thread_local

    本文转自 https blog csdn net aguoxin article details 103968031 Linux中的线程局部存储 一 本章节转自 https blog csdn net cywosp article deta
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记13——BTC匿名性篇2(零知识证明)

    北京大学肖臻老师 区块链技术与应用 公开课笔记 比特币回顾问答篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page 匿名性部分第一节 匿名性分析请见 cli
  • UncaughtExceptionHandler异常处理机制

    解释 UncaughtExceptionHandler类是java1 5里新增的 Thread类里面的一个函数式接口类的 类名意思为 未捕获的异常处理 该类的注释接口意思 接口处理器时调用线程突然终止 由于未捕获到异常 当一个线程要终止由于
  • mysql json字段长度_mysql5.7 新增的json字段类型

    一 我们先创建一个表 准备点数据 CREATE TABLE json test id int 11 unsigned NOT NULL AUTO INCREMENT COMMENT ID json json DEFAULT NULL COM
  • java什么场景使用克隆,Java设计模式----原型模式(克隆模式)

    场景 思考一下 克隆技术是怎么样的过程 JavaScript语言中的 继承怎么实现 那里面也有prototype 原型模式 通过new产生一个对象需要繁琐的数据准备或访问权限 则可以使用原型模式 就是java中的克隆技术 以某个对象为原型
  • Qt 搜索框

    一 前言 用户需要输入文本时 可使用QLineEdit控件进行编辑输入 缺点是样式相对单一 在使用百度搜索输入框时 发觉比较人性化 故采用QLineEdt QPushButton通过css样式实现自定义搜索框控件 包含如下功能 1 可设置占
  • 用 ChatGPT 解锁生成式游戏#StoryGames.AI

    生成式游戏 AI 是一种基于人工智能技术 自动生成游戏故事情节 关卡 角色等内容的游戏 AI ChatGPT 的发展生成式游戏 AI 产生了重要影响 为游戏开发者提供了更加灵活 自由的创作方式 每个人都有机会开发自己的专属游戏 StoryG
  • 调试最长的一帧(第16天)

    终于到达绘制了 先看总体流程阶段 然而 从并行堆栈上看 已经有渲染线程开启了 跟着电子书走 先是介绍 抄一抄 加深印象 osg的场景渲染过程可以简单地分为三个阶段 用户APP阶段 更新用户数据 负责场景对象的运动和管理等 筛选cull阶段
  • 这是基于maven管理的SpringBoot项目的mongodb测试笔记,只测试了最基本的增删改查和一些踩过的坑。

    这是基于maven管理的SpringBoot项目的mongodb测试笔记 只测试了最基本的增删改查和一些踩过的坑 一 项目的依赖配置
  • 小米万兆路由器安装homeassistant并接入homekit教程

    1 做好准备工作 正常运行docker并启动docker命令行 参考参考链接中的b站视频 2 拉取homeassistant docker pull homeassistant home assistant 3 设置homeassistan
  • 浅谈依赖注入

    最近几天在看一本名为Dependency Injection in NET 的书 主要讲了什么是依赖注入 使用依赖注入的优点 以及 NET平台上依赖注入的各种框架和用法 在这本书的开头 讲述了软件工程中的一个重要的理念就是关注分离 Sepa
  • mysql数据库的优缺点

    优点1 通常存储过程 标题有助于提高应用程序的性能 因为当你创建他的时候就已经编译了 只不过是按需编译的 2 存储过程有助于减少应用程序和数据库服务器之间的流量 因为应用程序不必发送多个冗长的SQL语句 而只能发送存储过程的名称和参数 3
  • IDEA卡死解决

    找到IDEA的安装目录bin 修改这个文件 修改为 Xms128m Xmx1024m XX MaxPermSize 250m XX ReservedCodeCacheSize 150m
  • STM32外部中断

    参考正点原子视频 外部中断概述 外部中断是单片机实时地处理外部事件的一种内部机制 当某种外部事件发生时 单片机的中断系统将迫使CPU暂停正在执行的程序 转而去进行中断事件的处理 中断处理完毕后 又返回被中断的程序处 继续执行下去 STM32
  • 大疆无人机的新玩法?Payload SDK 了解一下

    一则小新闻 两个新产品 美国时间 3 月 28 日 大疆在加州门洛帕克的消防局总局低调发布了两款新的产品 一款是此前与 FLIR 合作开发的热成像相机 Zenmuse XT 的升级产品 Zenmuse XT2 另一款则是钟德夫更为关注并且会
  • h5 实现一键复制到粘贴板 兼容iOS

    效果展示 先贴上测试连接 http cdn foundao com zhaosheng copytext 实现原理 采用 document execCommand copy 来实现复制到粘贴板功能 复制必须是选中input框的文字内容 然后
  • JNDI数据源的连接属性

    如果无须HIbernate自己管理数据源 而是直接访问容器管理数据源 Hibernate可使用JNDI Java命名目录接口 数据源的相关配置 下面是连接JNDI数据源的主要配置属性 hibernate connection datasou
  • Java 加减乘除 int、long、float、double四种类型

    在学习了基本数据类型之后 内容如下 计算题 假如今天逛超市花了99 99 请用加减乘除 进行计算得到99 99这个结果 要求 1 4个方法 2 数值随意编写 3 数值要用到int long float double四种类型 4 都是返回值
  • Win10在BIOS中如何启用虚拟化(VT)

    文章目录 1 VT技术简介 2 如何进入BIOS 3 如何在BIOS中开启VT 1 VT技术简介 VT 就是虚拟化技术 Virtualization Technology 的缩写 Intel VT就是指Intel的虚拟化技术 这种技术简单来
  • ThreadLocal使用 --用于保存每个登录用户的信息-userInfo

    有时我们需要知道每个用户的登录信息 一般我们是将登录的用户信息是保存在session范围内 而我们在DAO中要是使用用户的某些信息 比哪录录ID 单位ID之类的信息进行过滤时 需要从从control 层传到 sevice层 再传到DAO层