集成memcached 和spring security的学习记录

最近在搞利用memcached共享session,公司原有的代码使用java_memcached作客户端,而java_memcached在各种测试中显示出来的效率并不算好,所以找了这个javaeye首页 上的xmemcached 自己封装了HttpServletRequest和Session,实现了一些其它功能包括xmemcached不可用时自动切换会HttpSession和多memcached的同步(后一个似乎xmemcached会在以后版本加入)

 

把以上程序应用到系统中时,为了调试特别看了下request和session的attribute,尤其是spring security的,由于以前没有深入看过spring security的实现,开始很是困惑了一下,这里把关键的地方记录一下以备查询

 

1) memcached的Filter必须放在所有用到session的Filter之前,包括spring security的filter。实际上我把它放在了filter-map的第一位

2)spring security 会用 Request.setAttribute在一个Reqeust中放两个参数,_spring_security_filterSecurityInterceptor_filterApplied和__spring_security_session_integration_filter_applied,两个参数为boolean,从名字中可以看出其主要目的是防止在一个Request中多次加载

3) spring security会调用HttpSessionContextIntegrationFilter的storeSecurityContextInSession,用Session.setAttribute在Session中存放SecurityContext,其中包含Authentication和Principal,并在如上所述,用 Request.setAttribute设置_spring_security_filterSecurityInterceptor_filterApplie。这里放到Session中只是为了能够跨page使用SecurityContext,spring security自己使用的是SecurityContextHolder,它的缺省实现使用的是ThreadLocal,绝大部分访问也是在ThreadLocal上进行的,不知道为什么Spring要这么设计,我猜是觉得ThreadLocal效率比Session高?

4)用memcached代理session后,SecurityContext会存放到memcached中,而Request.setAttribute的那两个则不会,当然也不需要。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值