本文是我个人在开发web-security 安全框架中使用的方案。
在Web Server集群环境中需要实现 session 共享,一个很好的方法就是将 session 数据存放至 Redis 中。我打算在自己的安全框架中集成此功能,只需要几行配置就能自动让你的 web 项目集成 redis session 共享功能。
实现思路为:
将 Servlet 容器的HttpSession
实现替换成自己的实现, 如RedisHttpSession
。这样当在Controlelr
中调用session.setAttr()
此类方法时就可以执行自己的代码。我们编写一个Filter
, 在调用chain.doFilter(req, resp)
时,将HttpServletRequest
对象替换成我们自定义的SecurityServletRequestWrapper
对象,并重写getSession()
和getSession(boolean)
方法,让其返回我们自己的session对象,这样就完成了对session的完全控制 。
替换 Servlet 容器的 HttpSession 实现
首选需要编写SecurityServletRequestWrapper
类:
public class SecurityServletRequestWrapper extends HttpServletRequestWrapper {
private static Logger log = LoggerFactory.getLogger(SecurityServletRequestWrapper.class);