0 0

在 web project 中用 ThreadLocal 解决身份验证问题可行吗?0

将一个共用的 ThreadLocal 静态实例作为key,将不同对象的引用保存到不同线程的 ThreadLocalMap 中,然后在线程执行的各处通过这个静态ThreadLocal实例的 get() 方法取得自己线程保存的那个对象。

现在假设一个 web project 中,使用一个 Filter 截取用于用户身份识别的数据(例如 cookie),匹配身份校验后,将当前用户信息和权限通过 ThreadLocal.set() 保存,然后在本次请求的后续执行中,都通过 ThreadLocal.get() 获取身份。

问题是:能确保每个 request 对应的线程都是不同的吗?

问题补充:既然是采用线程池,那必然是要重用的,用 tomcat 测试的结果也证实了这点。补充以下疑问:
若不考虑使用 ThreadLocal,除了 jsessionid 外还有哪些适合做 key 的?
2013年7月24日 11:54

2个答案 按时间排序 按投票排序

0 0

1、能确保每个 request 对应的线程都是不同的!
2、就用sessionId吧(如果是登陆用户当然是userid了)

2013年7月25日 11:54
0 0

很多的servlet容器都采用线程池来处理request请求的 如tomcat可以配置线程池的size
就是说一个request请求在某一时刻对应唯一的Thread
换句话说一个thread一次只处理一个request
当然这只是tomcat的目前的处理方式,以后可能会变化

目前有些人觉得这种一个线程阻塞处理一个request的方式很低效,
用户发送了请求后需要一直等待服务器端的相应然后返回,
而高效的方式应该是服务端接收到请求后立即返回一个接收成功的标志,然后处理客户端请求完成后在发送响应数据给客户端

2013年7月24日 13:55

相关推荐

    ThreadLocal,你真的了解吗?

    ThreadLocal 是 Java 中一个非常重要的工具类,它主要用于在多线程环境中为每个线程创建独立的、私有的变量副本,避免了线程之间数据共享带来的复杂性和安全性问题。了解 ThreadLocal,首先需要掌握 Java 中的四种...

    [] - 2022-09-28 ThreadLocal 你真的会用吗?.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能

    使用ThreadLocal解决代码分层问题

    javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。

    ThreadLocal中内存泄漏和数据丢失问题的问题浅析及解决方案.docx

    ThreadLocal 中内存泄漏和数据丢失问题的问题浅析及解决方案 ThreadLocal 是 Java 中的一种线程本地存储机制,它可以解决线程之间的数据传递问题。然而,在使用 ThreadLocal 时,可能会出现内存泄漏和数据丢失问题...

    DBUTILs的ThreadLocal

    DbUTils中用ThreadLocal类

    ThreadLocal

    ThreadLocal通常被用来解决线程共享数据时可能出现的并发问题,避免了使用synchronized关键字进行同步控制的复杂性。 在Java中,ThreadLocal的工作原理是为每个线程创建一个单独的存储空间,每个线程可以独立地读写...

    ThreadLocal应用示例及理解

    - ThreadLocal不是线程同步机制,不能用来解决多个线程访问共享资源的问题。 - 不要将ThreadLocal用作全局变量,否则可能导致内存泄漏。 - 使用ThreadLocal时,要特别注意线程结束后的清理工作,防止内存泄漏。 - ...

    Java单线程ThreadLocal串值问题解决方案

    Java单线程ThreadLocal串值问题解决方案 Java单线程ThreadLocal串值问题解决方案主要介绍了Java单线程ThreadLocal串值问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    ThreadLocal 内存泄露的实例分析1

    解决这个问题的关键在于,我们需要确保在不再需要 `ThreadLocal` 变量时,及时清除其内部的引用。在 `LeakingServlet` 中,可以在每次请求结束时,清除 `ThreadLocal` 中的 `MyCounter`: ```java protected void ...

    ThreadLocal原理及在多层架构中的应用

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的概念,主要用于在多线程环境中为每个线程提供独立的变量副本。ThreadLocal不是一种数据结构,而是一种解决线程间共享数据的方式,它提供了线程安全的局部...

    ThreadLocal的几种误区

    ThreadLocal是Java编程中一种非常特殊的变量类型,它主要用于在多线程环境下为每个线程提供独立的变量副本,从而避免了线程间的数据共享和冲突。然而,ThreadLocal在理解和使用过程中容易产生一些误区,这里我们将...

    ThreadLocal:如何优雅的解决SimpleDateFormat多线程安全问题

    目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现...注意事项使用ThreadLocal解决SimpleDateFormat线程安全问题总结...

    使用ThreadLocal管理“session”数据

    在Web应用中,特别是对于"session"数据的管理,ThreadLocal可以作为一种有效的解决方案。 1. **什么是Session?** Session是HTTP协议中的一个概念,用于存储用户在服务器端的状态信息。当用户登录网站后,服务器会...

    ThreadLocal原理及在多层架构中的应用.pdf

    在Java中,ThreadLocal被广泛应用于Web中间件、服务端编程和微服务架构中,用以解决多线程环境下的数据隔离问题。 首先,ThreadLocal原理是基于每个线程创建一个私有的数据存储结构(ThreadLocalMap),使得线程...

    day18 10.使用ThreadLocal来解决问题

    在Java编程中,ThreadLocal是线程局部变量的类,它为每个线程提供了一个独立的变量副本,...总的来说,ThreadLocal是Java中解决线程间数据隔离问题的强大工具,但在使用时需要注意内存管理和线程安全,避免潜在的问题。

    ThreadLocal整理.docx

    ThreadLocal 整理 ThreadLocal 是 Java 中... ThreadLocal 是 Java 中的一个重要组件,它能够在每个线程中保持独立的副本,解决 Hash 冲突的机制是通过斐波那契数来实现的,并且提供了扩容机制来避免内存泄漏的问题。

    ThreadLocal垮线程池传递数据解决方案.docx

    这时,ThreadLocal 的局限性就暴露出来了,即它不能解决跨线程池之间的数据传递问题。 为了解决这个问题,TransmittableThreadLocal 诞生了。TransmittableThreadLocal 是一种专门为线程池设计的ThreadLocal解决...

Global site tag (gtag.js) - Google Analytics