一个使用线程局部存储(ThreadLocal)技术导致用户会话信息泄露案例的剖析
我们的系统是一个B/S架构的WEB系统,采用的是类似struts的基于action的WEB框架,近期系统上线后碰到了一个用户会话信息泄露的问题,虽然问题最终于半天后得到了解决,但对此问题的剖析有利于我们更深地理解与多线程并发相关的线程局部存储(ThreadLocal)技术,故特撰此文与大家共飨。
线程局部存储(ThreadLocal)技术是多线程技术中用于解决并发问题的一个最轻量级且使用起来最简单的技术。其原理是将一块内存与线程关联,每个线程访问的的变量都存在于本线程的局部存储区中,因此多个线程间访问相同的变 ...
Orca MSI Editor
Edit the properties of any MSI. Change the title, and text within the installer. Look at how and where the files are delivered. Enables you to right click any MSI and open with Orca.
InstallRite V2.5c
对于经常需要反复安装软件的朋友们来说,最麻烦的莫过于反复安装软件时那长时间的等待,而InstallRite可以节省您花在这方面的时间。使用过 Ghost等软件的朋 ...
- 20:44
- 浏览 (3462)
- 评论 (0)
近日看Ext-1.0.1源代码,在Ext.js的第552行有如下代码:
format : function(format){
var args = Array.prototype.slice.call(arguments, 1);
return format.replace(/\{(\d+)\}/g, function(m, i){
return args[i];
});
}
该方法实现如下功能:
String.format("name is {0} and age is {1}", "John" ...
根据一个表的数据update另一个表数据的SQL语句通常如下:
Mysql语法:
update T1 inner join (select ID, TYPE, sum(AMOUNT)
as NEW_AMOUNT from T2 group by ID, TYPE) as T3
on T1.ID = T3.ID and T1.TYPE = T3.TYPE
set T1.AMOUNT = T1.AMOUNT+T3.NEW_AMOUNT
SqlServer语法:
update T1 set T1.AMOUNT = T1.AMONT+T3.NEW_AMOUNT
from T1 inner j ...
- 18:29
- 浏览 (2334)
- 评论 (0)
将当前目录中所的jsp文件中的gb2312的字符集声明修改为UTF-8声明
find . -name "*.jsp"|xargs sed -i -e 's/charset=gb2312/charset=UTF-8/g'
方式1:
case "$f" in
.java) echo "java"
;;
*.ftl) echo "ftl"
;;
esac
方式2:
echo build.xml | awk -F. '{print $NF}'
上面的命令结果为:
xml
方式3:
basename build.xml .xml
上面的命令结果为:
build
和 & & amp;
单引号 ' & apos;
双引号 " & quot;
大于号 > & gt;
小于号 < & lt;
- 15:31
- 浏览 (3681)
- 评论 (0)
将lua/Makefile中的
PLATS= aix ansi bsd generic linux macosx mingw posix solaris
改为
PLATS= sco aix ansi bsd generic linux macosx mingw posix solaris
将lua/src/Makefile中的
PLATS= aix ansi bsd generic linux macosx mingw posix solaris
...
none:
@echo "Please choose a platform: $(PLATS)"
改为
PLATS= sco ai ...
今天进javaeye首页,点顶部“我的博客”链接,想写点东西,上上下下,左左右右,看了好几遍,没找到“新增文章”的链接或按钮,
看到了左边的“博客分类”,心想也许在这里面,点击进去,上上下下又看了几遍,还是未找到;
最后看到上面的一个小链接“管理博客”,试着进去,......,原来在这里
一度比较沮丧!
想起今天刚看了“别让我思考”一书的第一章:“别让我思考”,终于可以理直气壮地说:robbin,能不能别让我思考? ^_^
linux下使用crontab工具可以方便地定义计划任务,以下设置是每天22:30到23:00每两分种执行一次关机操作(强制休息,防止关机后又重启^_^)
# m h dom mon dow command
30-59/2 22-23 * * * halt -p
如下设置是希望每天22:10启动xmms
# m h dom mon dow command
10 22 * * * xmms
但上述设置却启动不了xmms,原因何在呢?原来xmms是图形应用,启动时需要有桌面环境,为此只需设置环境变量DISPLAY为:0.0即可:
# m h dom mon dow c ...
- 20:49
- 浏览 (4224)
- 评论 (0)
- 分类: Linux
- 发布在 Ubuntu For Fun 圈子
- 浏览: 52120 次
- 性别:

- 来自: shenzhen

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
一个使用线程局部存储(Thr ...
chbest 写道一般来说一个好的框架是需要拦截所有的... 里面通过配置正则表 ...
-- by vincent_fan -
一个使用线程局部存储(Thr ...
最好的选择应该是RequestListener,它里面的两个方法可以在创建和结束 ...
-- by javazhujf -
一个使用线程局部存储(Thr ...
其实问题产生的原因不是很简单吗?就是Filter里面没有清楚ThreadLoca ...
-- by liangguanhui -
一个使用线程局部存储(Thr ...
一般来说一个好的框架是需要拦截所有的... 里面通过配置正则表达式来去匹配不同类 ...
-- by chbest -
一个使用线程局部存储(Thr ...
jxb8901 写道 之所以不敢确定,主要是对filter的拦截机制了解得还不是 ...
-- by pufan






评论排行榜