package org.nutz.mvc.impl.session; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.nutz.mvc.SessionProvider; /** * 抽象的SessionProvider实现,可以作为 * @author wendal * */ public abstract class AbstractSessionProvider implements SessionProvider { private static final Object lock = new Object(); public HttpServletRequest filter(final HttpServletRequest req, final HttpServletResponse resp, final ServletContext servletContext) { return new HttpServletRequestWrapper(req) { private HttpSession session; public HttpSession getSession(boolean create) { if (create && session == null) { synchronized (lock) {//因为创建Session并不需要太多并发 if (session == null) session = createSession(req, resp, servletContext); } } return session; } }; } /** * 子类覆盖此方法,以创建一个新的Session对象,或者任何你想做的事 */ public abstract HttpSession createSession(final HttpServletRequest req, final HttpServletResponse resp, final ServletContext servletContext); public void notifyStop() { } }