// ========================================================================
// $Id: ValidatingInterceptor.java,v 1.4 2004/05/09 20:30:48 gregwilkins Exp $
// Copyright 2002-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// 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.
// ========================================================================
package org.mortbay.j2ee.session;
//----------------------------------------
import org.jboss.logging.Logger;
//----------------------------------------
public class ValidatingInterceptor
extends AroundInterceptor
{
protected static final Logger _log=Logger.getLogger(ValidatingInterceptor.class);
protected void before() throws IllegalStateException {if (_running) checkValid();}
protected void after() {}
//----------------------------------------
protected boolean _running=false;
public void start() {_log.trace("start()");_running=true;}
public void stop() {_log.trace("stop()"); _running=false;}
protected void
checkValid()
throws IllegalStateException
{
boolean valid=false;
State state=getState();
try
{
int mii=state.getMaxInactiveInterval(); // secs
int keep=mii;
mii=mii<1?getManager().getStore().getActualMaxInactiveInterval():mii; // secs
long lat=state.getLastAccessedTime(); // milisecs
long now=System.currentTimeMillis(); // milisecs
int age=(int)((now-lat)/1000); // secs
valid=(age<mii);
if (_log.isTraceEnabled()) _log.trace("session keep="+keep+", mii="+mii+", lat="+lat+", now="+now+", age="+age+", valid="+valid);
}
catch (java.rmi.NoSuchObjectException ignore)
{
// _log.info("IGNORE ABOVE NoSuchEntityException - harmless");
}
catch (javax.ejb.NoSuchEntityException ignore)
{
// _log.info("IGNORE ABOVE NoSuchEntityException - harmless");
}
catch (Exception e)
{
_log.error("couldn't determine validity of HttpSession", e);
}
if (!valid)
throw new IllegalStateException("invalid HttpSession - timed out");
}
// public Object clone() { return this; } // Stateless
}