//2012-02-19 johnpfeiffer (dynamic web project)
import java.util.Date;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
class UserSession
{
private static final String CLASSVERSION = "0.3";
private HttpSession session = null;
private String sessionToken = null;
UserSession( HttpServletRequest request )
{
if( request == null )
{ throw new IllegalArgumentException( "httpservletrequest is null" );
}else
{ session = request.getSession();
setExpirationMinutes( 1 );
sessionToken = UUID.randomUUID().toString();
}
}
UserSession( HttpServletRequest request , int minutes )
{
if( request == null )
{ throw new IllegalArgumentException( "httpservletrequest is null" );
}else
{
if( minutes < 1 )
{ throw new IllegalArgumentException( "minutes cannot be less than 1" );
}else
{
session = request.getSession();
setExpirationMinutes( minutes );
sessionToken = UUID.randomUUID().toString();
}
}
}
private void setExpirationMinutes( int minutes )
{
if( session != null )
{
if( minutes >= 1 )
{ session.setMaxInactiveInterval( minutes * 60 );
}else
{ throw new IllegalArgumentException( "ERROR: minutes cannot be less than 1" );
}
}else
{ throw new NullPointerException( "cannot set minutes, session is null" );
}
}
protected String getVersion()
{ return CLASSVERSION;
}
protected String getSessionInfo()
{
StringBuilder strb = new StringBuilder();
strb.append( "sessionIsNew , createdTimestamp , sessionId , lastAccessTimestamp , maxInactive , sessionToken" );
strb.append( System.getProperty( "line.separator" ) );
strb.append( session.isNew() + " , " + new Date( session.getCreationTime()) + " , " + session.getId() +
" , " + new Date( session.getLastAccessedTime()) + " , " + session.getMaxInactiveInterval() + " , " + session.getAttribute( "sessionToken") );
strb.append( System.getProperty( "line.separator" ) );
return strb.toString();
}
protected boolean isValid( )
{
boolean result = false;
if( session != null && sessionToken != null && !sessionToken.isEmpty() )
{
Object retrievedSessionTokenObject = session.getAttribute( "sessionToken" );
if( retrievedSessionTokenObject != null )
{
String retrievedSessionToken = retrievedSessionTokenObject.toString();
if( !retrievedSessionToken.isEmpty() && retrievedSessionToken.equals( sessionToken ) )
{ result = true;
}
}
}
return result;
}
protected long getInactiveExpiration()
{ return ( session.getMaxInactiveInterval() );
}
protected long getLastAccess()
{ return (session.getLastAccessedTime() );
}
protected boolean isExpired()
{
boolean result = false;
long lastaccesstimemilliseconds = session.getLastAccessedTime();
long currenttimemilliseconds = System.currentTimeMillis();
long maxinactiveseconds = session.getMaxInactiveInterval();
if( currenttimemilliseconds - lastaccesstimemilliseconds > maxinactiveseconds * 1000)
{ result = true;
}
return result;
}
protected boolean setValid()
{
boolean result = false;
if( session != null )
{ session.setAttribute( "sessionToken" , sessionToken );
result = true;
}
return result;
}
protected boolean setInvalid()
{
boolean result = false;
try{
if( session != null )
{ session.setAttribute( "sessionToken" , "" );
// session.invalidate(); // not sure why
result = true;
}
}catch( Exception e )
{ e.printStackTrace();
}
return result;
}
} // end UserSession class