Java tutorial
/* ************************************************************************************ * Copyright (C) 2008-2009 Openbravo S.L. * Licensed under the Apache Software License version 2.0 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. ************************************************************************************ */ import java.io.IOException; import java.util.Date; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class SessionExpirationFilter implements Filter { public void init(FilterConfig config) { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest hReq = (HttpServletRequest) req; HttpSession session = hReq.getSession(false); if (null != session) { Date expirationDate = (Date) session.getAttribute("expirationDate"); if (expirationDate == null) expirationDate = new Date(System.currentTimeMillis() + 1000000); // only // for // make // false // "expirationDate.before(new Date())" // in // the // first // execution if (expirationDate.before(new Date())) { session.invalidate(); session = null; } else { // ignore requests marked as both ajaxCall and ignoreForSessionTimeout String isAjaxCall = hReq.getParameter("IsAjaxCall"); String ignoreForSessionTimeout = hReq.getParameter("ignoreForSessionTimeout"); boolean ignoreForTimeout = "1".equals(isAjaxCall) && ("1".equals(ignoreForSessionTimeout)); if (ignoreForTimeout) { // Do nothing; don't update the session timestamp } else { session.setAttribute("expirationDate", new Date(System.currentTimeMillis() + session.getMaxInactiveInterval() * 1000)); } } } chain.doFilter(req, resp); } public void destroy() { } }