@ -19,11 +19,11 @@ import java.lang.reflect.Field;
import java.util.HashMap ;
import java.util.HashMap ;
import java.util.Map ;
import java.util.Map ;
import java.util.Map.Entry ;
import java.util.Map.Entry ;
import java.util.Set ;
import java.util.concurrent.TimeUnit ;
import java.util.concurrent.TimeUnit ;
import org.apache.catalina.session.StandardSession ;
import org.apache.catalina.session.StandardSession ;
import org.redisson.api.RMap ;
import org.redisson.api.RMap ;
import org.redisson.tomcat.RedissonSessionManager.ReadMode ;
/ * *
/ * *
* Redisson Session object for Apache Tomcat
* Redisson Session object for Apache Tomcat
@ -36,10 +36,12 @@ public class RedissonSession extends StandardSession {
private final RedissonSessionManager redissonManager ;
private final RedissonSessionManager redissonManager ;
private final Map < String , Object > attrs ;
private final Map < String , Object > attrs ;
private RMap < String , Object > map ;
private RMap < String , Object > map ;
private final RedissonSessionManager . ReadMode readMode ;
public RedissonSession ( RedissonSessionManager manager ) {
public RedissonSession ( RedissonSessionManager manager , RedissonSessionManager . ReadMode readMode ) {
super ( manager ) ;
super ( manager ) ;
this . redissonManager = manager ;
this . redissonManager = manager ;
this . readMode = readMode ;
try {
try {
Field attr = StandardSession . class . getDeclaredField ( "attributes" ) ;
Field attr = StandardSession . class . getDeclaredField ( "attributes" ) ;
attrs = ( Map < String , Object > ) attr . get ( this ) ;
attrs = ( Map < String , Object > ) attr . get ( this ) ;
@ -50,6 +52,15 @@ public class RedissonSession extends StandardSession {
private static final long serialVersionUID = - 2518607181636076487L ;
private static final long serialVersionUID = - 2518607181636076487L ;
@Override
public Object getAttribute ( String name ) {
if ( readMode = = ReadMode . REDIS ) {
return map . get ( name ) ;
}
return super . getAttribute ( name ) ;
}
@Override
@Override
public void setId ( String id , boolean notify ) {
public void setId ( String id , boolean notify ) {
super . setId ( id , notify ) ;
super . setId ( id , notify ) ;
@ -167,24 +178,30 @@ public class RedissonSession extends StandardSession {
}
}
}
}
public void load ( ) {
public void load ( Map < String , Object > attrs ) {
Set < Entry < String , Object > > entrySet = map . readAllEntrySet ( ) ;
Long creationTime = ( Long ) attrs . remove ( "session:creationTime" ) ;
for ( Entry < String , Object > entry : entrySet ) {
if ( creationTime ! = null ) {
if ( "session:creationTime" . equals ( entry . getKey ( ) ) ) {
this . creationTime = creationTime ;
creationTime = ( Long ) entry . getValue ( ) ;
}
} else if ( "session:lastAccessedTime" . equals ( entry . getKey ( ) ) ) {
Long lastAccessedTime = ( Long ) attrs . remove ( "session:lastAccessedTime" ) ;
lastAccessedTime = ( Long ) entry . getValue ( ) ;
if ( lastAccessedTime ! = null ) {
} else if ( "session:thisAccessedTime" . equals ( entry . getKey ( ) ) ) {
this . lastAccessedTime = lastAccessedTime ;
thisAccessedTime = ( Long ) entry . getValue ( ) ;
}
} else if ( "session:maxInactiveInterval" . equals ( entry . getKey ( ) ) ) {
Long thisAccessedTime = ( Long ) attrs . remove ( "session:thisAccessedTime" ) ;
maxInactiveInterval = ( Integer ) entry . getValue ( ) ;
if ( thisAccessedTime ! = null ) {
} else if ( "session:isValid" . equals ( entry . getKey ( ) ) ) {
this . thisAccessedTime = thisAccessedTime ;
isValid = ( Boolean ) entry . getValue ( ) ;
}
} else if ( "session:isNew" . equals ( entry . getKey ( ) ) ) {
Boolean isValid = ( Boolean ) attrs . remove ( "session:isValid" ) ;
isNew = ( Boolean ) entry . getValue ( ) ;
if ( isValid ! = null ) {
} else {
this . isValid = isValid ;
setAttribute ( entry . getKey ( ) , entry . getValue ( ) , false ) ;
}
}
Boolean isNew = ( Boolean ) attrs . remove ( "session:isNew" ) ;
if ( isNew ! = null ) {
this . isNew = isNew ;
}
for ( Entry < String , Object > entry : attrs . entrySet ( ) ) {
setAttribute ( entry . getKey ( ) , entry . getValue ( ) , false ) ;
}
}
}
}