Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_57962205
redisson
提交
c6269509
R
redisson
项目概览
weixin_57962205
/
redisson
与 Fork 源项目一致
从无法访问的项目Fork
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redisson
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c6269509
编写于
8月 16, 2018
作者:
N
Nikita
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactoring
上级
24146f77
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
258 addition
and
194 deletion
+258
-194
redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java
...-6/src/main/java/org/redisson/tomcat/RedissonSession.java
+37
-24
redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
...main/java/org/redisson/tomcat/RedissonSessionManager.java
+33
-24
redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java
...-7/src/main/java/org/redisson/tomcat/RedissonSession.java
+34
-21
redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
...main/java/org/redisson/tomcat/RedissonSessionManager.java
+26
-17
redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java
...-8/src/main/java/org/redisson/tomcat/RedissonSession.java
+35
-22
redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
...main/java/org/redisson/tomcat/RedissonSessionManager.java
+29
-32
redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java
...-9/src/main/java/org/redisson/tomcat/RedissonSession.java
+35
-22
redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
...main/java/org/redisson/tomcat/RedissonSessionManager.java
+29
-32
未找到文件。
redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java
浏览文件 @
c6269509
...
...
@@ -16,9 +16,12 @@
package
org.redisson.tomcat
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.catalina.session.StandardSession
;
...
...
@@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public
class
RedissonSession
extends
StandardSession
{
private
static
final
String
IS_NEW_ATTR
=
"session:isNew"
;
private
static
final
String
IS_VALID_ATTR
=
"session:isValid"
;
private
static
final
String
THIS_ACCESSED_TIME_ATTR
=
"session:thisAccessedTime"
;
private
static
final
String
MAX_INACTIVE_INTERVAL_ATTR
=
"session:maxInactiveInterval"
;
private
static
final
String
LAST_ACCESSED_TIME_ATTR
=
"session:lastAccessedTime"
;
private
static
final
String
CREATION_TIME_ATTR
=
"session:creationTime"
;
public
static
final
Set
<
String
>
ATTRS
=
new
HashSet
<
String
>(
Arrays
.
asList
(
IS_NEW_ATTR
,
IS_VALID_ATTR
,
THIS_ACCESSED_TIME_ATTR
,
MAX_INACTIVE_INTERVAL_ATTR
,
LAST_ACCESSED_TIME_ATTR
,
CREATION_TIME_ATTR
));
private
final
RedissonSessionManager
redissonManager
;
private
final
Map
<
String
,
Object
>
attrs
;
private
RMap
<
String
,
Object
>
map
;
...
...
@@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
3
);
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
2
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -115,7 +128,7 @@ public class RedissonSession extends StandardSession {
}
}
}
protected
AttributesPutAllMessage
createPutAllMessage
(
Map
<
String
,
Object
>
newMap
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
for
(
Entry
<
String
,
Object
>
entry
:
newMap
.
entrySet
())
{
...
...
@@ -129,13 +142,13 @@ public class RedissonSession extends StandardSession {
super
.
setMaxInactiveInterval
(
interval
);
if
(
map
!=
null
)
{
fastPut
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
fastPut
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
if
(
maxInactiveInterval
>=
0
)
{
map
.
expire
(
getMaxInactiveInterval
(),
TimeUnit
.
SECONDS
);
}
}
}
private
void
fastPut
(
String
name
,
Object
value
)
{
map
.
fastPut
(
name
,
value
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
...
...
@@ -151,8 +164,8 @@ public class RedissonSession extends StandardSession {
if
(!
isValid
&&
!
map
.
isExists
())
{
return
;
}
fastPut
(
"session:isValid"
,
isValid
);
fastPut
(
IS_VALID_ATTR
,
isValid
);
}
}
...
...
@@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super
.
setNew
(
isNew
);
if
(
map
!=
null
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super
.
endAccess
();
if
(
isNew
!=
oldValue
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public
void
save
()
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>();
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
newMap
.
put
(
"session:isValid"
,
isValid
);
newMap
.
put
(
"session:isNew"
,
isNew
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
newMap
.
put
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
newMap
.
put
(
IS_VALID_ATTR
,
isValid
);
newMap
.
put
(
IS_NEW_ATTR
,
isNew
);
if
(
attrs
!=
null
)
{
for
(
Entry
<
String
,
Object
>
entry
:
attrs
.
entrySet
())
{
...
...
@@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public
void
load
(
Map
<
String
,
Object
>
attrs
)
{
Long
creationTime
=
(
Long
)
attrs
.
remove
(
"session:creationTime"
);
Long
creationTime
=
(
Long
)
attrs
.
remove
(
CREATION_TIME_ATTR
);
if
(
creationTime
!=
null
)
{
this
.
creationTime
=
creationTime
;
}
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:lastAccessedTime"
);
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
LAST_ACCESSED_TIME_ATTR
);
if
(
lastAccessedTime
!=
null
)
{
this
.
lastAccessedTime
=
lastAccessedTime
;
}
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
"session:maxInactiveInterval"
);
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
MAX_INACTIVE_INTERVAL_ATTR
);
if
(
maxInactiveInterval
!=
null
)
{
this
.
maxInactiveInterval
=
maxInactiveInterval
;
}
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:thisAccessedTime"
);
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
THIS_ACCESSED_TIME_ATTR
);
if
(
thisAccessedTime
!=
null
)
{
this
.
thisAccessedTime
=
thisAccessedTime
;
}
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
"session:isValid"
);
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
IS_VALID_ATTR
);
if
(
isValid
!=
null
)
{
this
.
isValid
=
isValid
;
}
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
"session:isNew"
);
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
IS_NEW_ATTR
);
if
(
isNew
!=
null
)
{
this
.
isNew
=
isNew
;
}
...
...
redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
浏览文件 @
c6269509
...
...
@@ -17,6 +17,7 @@ package org.redisson.tomcat;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map.Entry
;
...
...
@@ -51,7 +52,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
public
enum
UpdateMode
{
DEFAULT
,
AFTER_REQUEST
}
private
final
Log
log
=
LogFactory
.
getLog
(
RedissonSessionManager
.
class
);
protected
LifecycleSupport
lifecycle
=
new
LifecycleSupport
(
this
);
private
RedissonClient
redisson
;
...
...
@@ -59,7 +60,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
private
ReadMode
readMode
=
ReadMode
.
MEMORY
;
private
UpdateMode
updateMode
=
UpdateMode
.
DEFAULT
;
private
String
keyPrefix
=
""
;
public
String
getUpdateMode
()
{
return
updateMode
.
toString
();
}
...
...
@@ -75,7 +76,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
public
void
setReadMode
(
String
readMode
)
{
this
.
readMode
=
ReadMode
.
valueOf
(
readMode
);
}
public
void
setConfigPath
(
String
configPath
)
{
this
.
configPath
=
configPath
;
}
...
...
@@ -96,7 +97,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
public
int
getRejectedSessions
()
{
return
0
;
}
@Override
public
void
load
()
throws
ClassNotFoundException
,
IOException
{
}
...
...
@@ -149,7 +150,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
final
String
name
=
keyPrefix
+
separator
+
"redisson:tomcat_session:"
+
sessionId
;
return
redisson
.
getMap
(
name
);
}
public
RTopic
<
AttributeMessage
>
getTopic
()
{
return
redisson
.
getTopic
(
"redisson:tomcat_session_updates:"
+
container
.
getName
());
}
...
...
@@ -157,22 +158,30 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
@Override
public
Session
findSession
(
String
id
)
throws
IOException
{
Session
result
=
super
.
findSession
(
id
);
if
(
result
==
null
&&
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
getMap
(
id
).
readAllMap
();
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
if
(
result
==
null
)
{
if
(
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
;
if
(
readMode
==
ReadMode
.
MEMORY
)
{
attrs
=
getMap
(
id
).
readAllMap
();
}
else
{
attrs
=
getMap
(
id
).
getAll
(
RedissonSession
.
ATTRS
);
}
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
return
null
;
}
result
.
access
();
...
...
@@ -246,7 +255,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
lifecycle
.
fireLifecycleEvent
(
START_EVENT
,
null
);
}
protected
RedissonClient
buildClient
()
throws
LifecycleException
{
Config
config
=
null
;
try
{
...
...
@@ -260,7 +269,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
throw
new
LifecycleException
(
"Can't parse yaml config "
+
configPath
,
e1
);
}
}
try
{
try
{
Config
c
=
new
Config
(
config
);
...
...
@@ -289,7 +298,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
lifecycle
.
fireLifecycleEvent
(
STOP_EVENT
,
null
);
}
public
void
store
(
HttpSession
session
)
throws
IOException
{
if
(
session
==
null
)
{
return
;
...
...
@@ -302,5 +311,5 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
}
}
}
}
redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java
浏览文件 @
c6269509
...
...
@@ -16,9 +16,12 @@
package
org.redisson.tomcat
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.catalina.session.StandardSession
;
...
...
@@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public
class
RedissonSession
extends
StandardSession
{
private
static
final
String
IS_NEW_ATTR
=
"session:isNew"
;
private
static
final
String
IS_VALID_ATTR
=
"session:isValid"
;
private
static
final
String
THIS_ACCESSED_TIME_ATTR
=
"session:thisAccessedTime"
;
private
static
final
String
MAX_INACTIVE_INTERVAL_ATTR
=
"session:maxInactiveInterval"
;
private
static
final
String
LAST_ACCESSED_TIME_ATTR
=
"session:lastAccessedTime"
;
private
static
final
String
CREATION_TIME_ATTR
=
"session:creationTime"
;
public
static
final
Set
<
String
>
ATTRS
=
new
HashSet
<
String
>(
Arrays
.
asList
(
IS_NEW_ATTR
,
IS_VALID_ATTR
,
THIS_ACCESSED_TIME_ATTR
,
MAX_INACTIVE_INTERVAL_ATTR
,
LAST_ACCESSED_TIME_ATTR
,
CREATION_TIME_ATTR
));
private
final
RedissonSessionManager
redissonManager
;
private
final
Map
<
String
,
Object
>
attrs
;
private
RMap
<
String
,
Object
>
map
;
...
...
@@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
3
);
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
2
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super
.
setMaxInactiveInterval
(
interval
);
if
(
map
!=
null
)
{
fastPut
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
fastPut
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
if
(
maxInactiveInterval
>=
0
)
{
map
.
expire
(
getMaxInactiveInterval
(),
TimeUnit
.
SECONDS
);
}
...
...
@@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return
;
}
fastPut
(
"session:isValid"
,
isValid
);
fastPut
(
IS_VALID_ATTR
,
isValid
);
}
}
...
...
@@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super
.
setNew
(
isNew
);
if
(
map
!=
null
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super
.
endAccess
();
if
(
isNew
!=
oldValue
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public
void
save
()
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>();
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
newMap
.
put
(
"session:isValid"
,
isValid
);
newMap
.
put
(
"session:isNew"
,
isNew
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
newMap
.
put
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
newMap
.
put
(
IS_VALID_ATTR
,
isValid
);
newMap
.
put
(
IS_NEW_ATTR
,
isNew
);
if
(
attrs
!=
null
)
{
for
(
Entry
<
String
,
Object
>
entry
:
attrs
.
entrySet
())
{
...
...
@@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public
void
load
(
Map
<
String
,
Object
>
attrs
)
{
Long
creationTime
=
(
Long
)
attrs
.
remove
(
"session:creationTime"
);
Long
creationTime
=
(
Long
)
attrs
.
remove
(
CREATION_TIME_ATTR
);
if
(
creationTime
!=
null
)
{
this
.
creationTime
=
creationTime
;
}
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:lastAccessedTime"
);
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
LAST_ACCESSED_TIME_ATTR
);
if
(
lastAccessedTime
!=
null
)
{
this
.
lastAccessedTime
=
lastAccessedTime
;
}
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
"session:maxInactiveInterval"
);
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
MAX_INACTIVE_INTERVAL_ATTR
);
if
(
maxInactiveInterval
!=
null
)
{
this
.
maxInactiveInterval
=
maxInactiveInterval
;
}
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:thisAccessedTime"
);
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
THIS_ACCESSED_TIME_ATTR
);
if
(
thisAccessedTime
!=
null
)
{
this
.
thisAccessedTime
=
thisAccessedTime
;
}
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
"session:isValid"
);
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
IS_VALID_ATTR
);
if
(
isValid
!=
null
)
{
this
.
isValid
=
isValid
;
}
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
"session:isNew"
);
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
IS_NEW_ATTR
);
if
(
isNew
!=
null
)
{
this
.
isNew
=
isNew
;
}
...
...
redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
浏览文件 @
c6269509
...
...
@@ -17,6 +17,7 @@ package org.redisson.tomcat;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map.Entry
;
...
...
@@ -128,7 +129,7 @@ public class RedissonSessionManager extends ManagerBase {
final
String
name
=
keyPrefix
+
separator
+
"redisson:tomcat_session:"
+
sessionId
;
return
redisson
.
getMap
(
name
);
}
public
RTopic
<
AttributeMessage
>
getTopic
()
{
return
redisson
.
getTopic
(
"redisson:tomcat_session_updates:"
+
container
.
getName
());
}
...
...
@@ -136,22 +137,30 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public
Session
findSession
(
String
id
)
throws
IOException
{
Session
result
=
super
.
findSession
(
id
);
if
(
result
==
null
&&
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
getMap
(
id
).
readAllMap
();
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
if
(
result
==
null
)
{
if
(
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
new
HashMap
<
String
,
Object
>();
if
(
readMode
==
ReadMode
.
MEMORY
)
{
attrs
=
getMap
(
id
).
readAllMap
();
}
else
{
attrs
=
getMap
(
id
).
getAll
(
RedissonSession
.
ATTRS
);
}
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
return
null
;
}
result
.
access
();
...
...
@@ -186,7 +195,7 @@ public class RedissonSessionManager extends ManagerBase {
if
(
updateMode
==
UpdateMode
.
AFTER_REQUEST
)
{
getEngine
().
getPipeline
().
addValve
(
new
UpdateValve
(
this
));
}
if
(
readMode
==
ReadMode
.
MEMORY
)
{
RTopic
<
AttributeMessage
>
updatesTopic
=
getTopic
();
updatesTopic
.
addListener
(
new
MessageListener
<
AttributeMessage
>()
{
...
...
redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java
浏览文件 @
c6269509
...
...
@@ -16,9 +16,12 @@
package
org.redisson.tomcat
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.catalina.session.StandardSession
;
...
...
@@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public
class
RedissonSession
extends
StandardSession
{
private
static
final
String
IS_NEW_ATTR
=
"session:isNew"
;
private
static
final
String
IS_VALID_ATTR
=
"session:isValid"
;
private
static
final
String
THIS_ACCESSED_TIME_ATTR
=
"session:thisAccessedTime"
;
private
static
final
String
MAX_INACTIVE_INTERVAL_ATTR
=
"session:maxInactiveInterval"
;
private
static
final
String
LAST_ACCESSED_TIME_ATTR
=
"session:lastAccessedTime"
;
private
static
final
String
CREATION_TIME_ATTR
=
"session:creationTime"
;
public
static
final
Set
<
String
>
ATTRS
=
new
HashSet
<
String
>(
Arrays
.
asList
(
IS_NEW_ATTR
,
IS_VALID_ATTR
,
THIS_ACCESSED_TIME_ATTR
,
MAX_INACTIVE_INTERVAL_ATTR
,
LAST_ACCESSED_TIME_ATTR
,
CREATION_TIME_ATTR
));
private
final
RedissonSessionManager
redissonManager
;
private
final
Map
<
String
,
Object
>
attrs
;
private
RMap
<
String
,
Object
>
map
;
...
...
@@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
3
);
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
2
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -115,7 +128,7 @@ public class RedissonSession extends StandardSession {
}
}
}
protected
AttributesPutAllMessage
createPutAllMessage
(
Map
<
String
,
Object
>
newMap
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
for
(
Entry
<
String
,
Object
>
entry
:
newMap
.
entrySet
())
{
...
...
@@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super
.
setMaxInactiveInterval
(
interval
);
if
(
map
!=
null
)
{
fastPut
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
fastPut
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
if
(
maxInactiveInterval
>=
0
)
{
map
.
expire
(
getMaxInactiveInterval
(),
TimeUnit
.
SECONDS
);
}
...
...
@@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return
;
}
fastPut
(
"session:isValid"
,
isValid
);
fastPut
(
IS_VALID_ATTR
,
isValid
);
}
}
...
...
@@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super
.
setNew
(
isNew
);
if
(
map
!=
null
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super
.
endAccess
();
if
(
isNew
!=
oldValue
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public
void
save
()
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>();
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
newMap
.
put
(
"session:isValid"
,
isValid
);
newMap
.
put
(
"session:isNew"
,
isNew
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
newMap
.
put
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
newMap
.
put
(
IS_VALID_ATTR
,
isValid
);
newMap
.
put
(
IS_NEW_ATTR
,
isNew
);
if
(
attrs
!=
null
)
{
for
(
Entry
<
String
,
Object
>
entry
:
attrs
.
entrySet
())
{
...
...
@@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public
void
load
(
Map
<
String
,
Object
>
attrs
)
{
Long
creationTime
=
(
Long
)
attrs
.
remove
(
"session:creationTime"
);
Long
creationTime
=
(
Long
)
attrs
.
remove
(
CREATION_TIME_ATTR
);
if
(
creationTime
!=
null
)
{
this
.
creationTime
=
creationTime
;
}
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:lastAccessedTime"
);
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
LAST_ACCESSED_TIME_ATTR
);
if
(
lastAccessedTime
!=
null
)
{
this
.
lastAccessedTime
=
lastAccessedTime
;
}
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
"session:maxInactiveInterval"
);
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
MAX_INACTIVE_INTERVAL_ATTR
);
if
(
maxInactiveInterval
!=
null
)
{
this
.
maxInactiveInterval
=
maxInactiveInterval
;
}
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:thisAccessedTime"
);
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
THIS_ACCESSED_TIME_ATTR
);
if
(
thisAccessedTime
!=
null
)
{
this
.
thisAccessedTime
=
thisAccessedTime
;
}
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
"session:isValid"
);
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
IS_VALID_ATTR
);
if
(
isValid
!=
null
)
{
this
.
isValid
=
isValid
;
}
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
"session:isNew"
);
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
IS_NEW_ATTR
);
if
(
isNew
!=
null
)
{
this
.
isNew
=
isNew
;
}
...
...
redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
浏览文件 @
c6269509
...
...
@@ -17,6 +17,7 @@ package org.redisson.tomcat;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map.Entry
;
...
...
@@ -36,9 +37,6 @@ import org.redisson.api.listener.MessageListener;
import
org.redisson.client.codec.Codec
;
import
org.redisson.config.Config
;
import
io.netty.buffer.ByteBufUtil
;
import
io.netty.util.internal.PlatformDependent
;
/**
* Redisson Session Manager for Apache Tomcat
*
...
...
@@ -59,16 +57,7 @@ public class RedissonSessionManager extends ManagerBase {
private
UpdateMode
updateMode
=
UpdateMode
.
DEFAULT
;
private
String
keyPrefix
=
""
;
private
final
String
id
=
ByteBufUtil
.
hexDump
(
generateId
());
protected
static
byte
[]
generateId
()
{
byte
[]
id
=
new
byte
[
16
];
// TODO JDK UPGRADE replace to native ThreadLocalRandom
PlatformDependent
.
threadLocalRandom
().
nextBytes
(
id
);
return
id
;
}
public
String
getUpdateMode
()
{
return
updateMode
.
toString
();
}
...
...
@@ -139,7 +128,7 @@ public class RedissonSessionManager extends ManagerBase {
final
String
name
=
keyPrefix
+
separator
+
"redisson:tomcat_session:"
+
sessionId
;
return
redisson
.
getMap
(
name
);
}
public
RTopic
<
AttributeMessage
>
getTopic
()
{
return
redisson
.
getTopic
(
"redisson:tomcat_session_updates:"
+
getContext
().
getName
());
}
...
...
@@ -147,22 +136,30 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public
Session
findSession
(
String
id
)
throws
IOException
{
Session
result
=
super
.
findSession
(
id
);
if
(
result
==
null
&&
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
getMap
(
id
).
readAllMap
();
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
if
(
result
==
null
)
{
if
(
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
new
HashMap
<
String
,
Object
>();
if
(
readMode
==
ReadMode
.
MEMORY
)
{
attrs
=
getMap
(
id
).
readAllMap
();
}
else
{
attrs
=
getMap
(
id
).
getAll
(
RedissonSession
.
ATTRS
);
}
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
return
null
;
}
result
.
access
();
...
...
@@ -197,7 +194,7 @@ public class RedissonSessionManager extends ManagerBase {
if
(
updateMode
==
UpdateMode
.
AFTER_REQUEST
)
{
getEngine
().
getPipeline
().
addValve
(
new
UpdateValve
(
this
));
}
if
(
readMode
==
ReadMode
.
MEMORY
)
{
RTopic
<
AttributeMessage
>
updatesTopic
=
getTopic
();
updatesTopic
.
addListener
(
new
MessageListener
<
AttributeMessage
>()
{
...
...
@@ -292,9 +289,9 @@ public class RedissonSessionManager extends ManagerBase {
if
(
updateMode
==
UpdateMode
.
AFTER_REQUEST
)
{
RedissonSession
sess
=
(
RedissonSession
)
super
.
findSession
(
session
.
getId
());
if
(
sess
!=
null
)
{
sess
.
save
();
sess
.
save
();
}
}
}
}
}
redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java
浏览文件 @
c6269509
...
...
@@ -16,9 +16,12 @@
package
org.redisson.tomcat
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.catalina.session.StandardSession
;
...
...
@@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public
class
RedissonSession
extends
StandardSession
{
private
static
final
String
IS_NEW_ATTR
=
"session:isNew"
;
private
static
final
String
IS_VALID_ATTR
=
"session:isValid"
;
private
static
final
String
THIS_ACCESSED_TIME_ATTR
=
"session:thisAccessedTime"
;
private
static
final
String
MAX_INACTIVE_INTERVAL_ATTR
=
"session:maxInactiveInterval"
;
private
static
final
String
LAST_ACCESSED_TIME_ATTR
=
"session:lastAccessedTime"
;
private
static
final
String
CREATION_TIME_ATTR
=
"session:creationTime"
;
public
static
final
Set
<
String
>
ATTRS
=
new
HashSet
<
String
>(
Arrays
.
asList
(
IS_NEW_ATTR
,
IS_VALID_ATTR
,
THIS_ACCESSED_TIME_ATTR
,
MAX_INACTIVE_INTERVAL_ATTR
,
LAST_ACCESSED_TIME_ATTR
,
CREATION_TIME_ATTR
));
private
final
RedissonSessionManager
redissonManager
;
private
final
Map
<
String
,
Object
>
attrs
;
private
RMap
<
String
,
Object
>
map
;
...
...
@@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
3
);
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if
(
map
!=
null
)
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>(
2
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
map
.
putAll
(
newMap
);
if
(
readMode
==
ReadMode
.
MEMORY
)
{
topic
.
publish
(
createPutAllMessage
(
newMap
));
...
...
@@ -115,7 +128,7 @@ public class RedissonSession extends StandardSession {
}
}
}
protected
AttributesPutAllMessage
createPutAllMessage
(
Map
<
String
,
Object
>
newMap
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
for
(
Entry
<
String
,
Object
>
entry
:
newMap
.
entrySet
())
{
...
...
@@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super
.
setMaxInactiveInterval
(
interval
);
if
(
map
!=
null
)
{
fastPut
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
fastPut
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
if
(
maxInactiveInterval
>=
0
)
{
map
.
expire
(
getMaxInactiveInterval
(),
TimeUnit
.
SECONDS
);
}
...
...
@@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return
;
}
fastPut
(
"session:isValid"
,
isValid
);
fastPut
(
IS_VALID_ATTR
,
isValid
);
}
}
...
...
@@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super
.
setNew
(
isNew
);
if
(
map
!=
null
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super
.
endAccess
();
if
(
isNew
!=
oldValue
)
{
fastPut
(
"session:isNew"
,
isNew
);
fastPut
(
IS_NEW_ATTR
,
isNew
);
}
}
...
...
@@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public
void
save
()
{
Map
<
String
,
Object
>
newMap
=
new
HashMap
<
String
,
Object
>();
newMap
.
put
(
"session:creationTime"
,
creationTime
);
newMap
.
put
(
"session:lastAccessedTime"
,
lastAccessedTime
);
newMap
.
put
(
"session:thisAccessedTime"
,
thisAccessedTime
);
newMap
.
put
(
"session:maxInactiveInterval"
,
maxInactiveInterval
);
newMap
.
put
(
"session:isValid"
,
isValid
);
newMap
.
put
(
"session:isNew"
,
isNew
);
newMap
.
put
(
CREATION_TIME_ATTR
,
creationTime
);
newMap
.
put
(
LAST_ACCESSED_TIME_ATTR
,
lastAccessedTime
);
newMap
.
put
(
THIS_ACCESSED_TIME_ATTR
,
thisAccessedTime
);
newMap
.
put
(
MAX_INACTIVE_INTERVAL_ATTR
,
maxInactiveInterval
);
newMap
.
put
(
IS_VALID_ATTR
,
isValid
);
newMap
.
put
(
IS_NEW_ATTR
,
isNew
);
if
(
attrs
!=
null
)
{
for
(
Entry
<
String
,
Object
>
entry
:
attrs
.
entrySet
())
{
...
...
@@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public
void
load
(
Map
<
String
,
Object
>
attrs
)
{
Long
creationTime
=
(
Long
)
attrs
.
remove
(
"session:creationTime"
);
Long
creationTime
=
(
Long
)
attrs
.
remove
(
CREATION_TIME_ATTR
);
if
(
creationTime
!=
null
)
{
this
.
creationTime
=
creationTime
;
}
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:lastAccessedTime"
);
Long
lastAccessedTime
=
(
Long
)
attrs
.
remove
(
LAST_ACCESSED_TIME_ATTR
);
if
(
lastAccessedTime
!=
null
)
{
this
.
lastAccessedTime
=
lastAccessedTime
;
}
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
"session:maxInactiveInterval"
);
Integer
maxInactiveInterval
=
(
Integer
)
attrs
.
remove
(
MAX_INACTIVE_INTERVAL_ATTR
);
if
(
maxInactiveInterval
!=
null
)
{
this
.
maxInactiveInterval
=
maxInactiveInterval
;
}
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
"session:thisAccessedTime"
);
Long
thisAccessedTime
=
(
Long
)
attrs
.
remove
(
THIS_ACCESSED_TIME_ATTR
);
if
(
thisAccessedTime
!=
null
)
{
this
.
thisAccessedTime
=
thisAccessedTime
;
}
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
"session:isValid"
);
Boolean
isValid
=
(
Boolean
)
attrs
.
remove
(
IS_VALID_ATTR
);
if
(
isValid
!=
null
)
{
this
.
isValid
=
isValid
;
}
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
"session:isNew"
);
Boolean
isNew
=
(
Boolean
)
attrs
.
remove
(
IS_NEW_ATTR
);
if
(
isNew
!=
null
)
{
this
.
isNew
=
isNew
;
}
...
...
redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java
浏览文件 @
c6269509
...
...
@@ -17,6 +17,7 @@ package org.redisson.tomcat;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map.Entry
;
...
...
@@ -36,9 +37,6 @@ import org.redisson.api.listener.MessageListener;
import
org.redisson.client.codec.Codec
;
import
org.redisson.config.Config
;
import
io.netty.buffer.ByteBufUtil
;
import
io.netty.util.internal.PlatformDependent
;
/**
* Redisson Session Manager for Apache Tomcat
*
...
...
@@ -59,16 +57,7 @@ public class RedissonSessionManager extends ManagerBase {
private
UpdateMode
updateMode
=
UpdateMode
.
DEFAULT
;
private
String
keyPrefix
=
""
;
private
final
String
id
=
ByteBufUtil
.
hexDump
(
generateId
());
protected
static
byte
[]
generateId
()
{
byte
[]
id
=
new
byte
[
16
];
// TODO JDK UPGRADE replace to native ThreadLocalRandom
PlatformDependent
.
threadLocalRandom
().
nextBytes
(
id
);
return
id
;
}
public
String
getUpdateMode
()
{
return
updateMode
.
toString
();
}
...
...
@@ -139,7 +128,7 @@ public class RedissonSessionManager extends ManagerBase {
final
String
name
=
keyPrefix
+
separator
+
"redisson:tomcat_session:"
+
sessionId
;
return
redisson
.
getMap
(
name
);
}
public
RTopic
<
AttributeMessage
>
getTopic
()
{
return
redisson
.
getTopic
(
"redisson:tomcat_session_updates:"
+
getContext
().
getName
());
}
...
...
@@ -147,22 +136,30 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public
Session
findSession
(
String
id
)
throws
IOException
{
Session
result
=
super
.
findSession
(
id
);
if
(
result
==
null
&&
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
getMap
(
id
).
readAllMap
();
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
if
(
result
==
null
)
{
if
(
id
!=
null
)
{
Map
<
String
,
Object
>
attrs
=
new
HashMap
<
String
,
Object
>();
if
(
readMode
==
ReadMode
.
MEMORY
)
{
attrs
=
getMap
(
id
).
readAllMap
();
}
else
{
attrs
=
getMap
(
id
).
getAll
(
RedissonSession
.
ATTRS
);
}
if
(
attrs
.
isEmpty
()
||
!
Boolean
.
valueOf
(
String
.
valueOf
(
attrs
.
get
(
"session:isValid"
))))
{
log
.
info
(
"Session "
+
id
+
" can't be found"
);
return
null
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
}
RedissonSession
session
=
(
RedissonSession
)
createEmptySession
();
session
.
setId
(
id
);
session
.
setManager
(
this
);
session
.
load
(
attrs
);
session
.
access
();
session
.
endAccess
();
return
session
;
return
null
;
}
result
.
access
();
...
...
@@ -197,7 +194,7 @@ public class RedissonSessionManager extends ManagerBase {
if
(
updateMode
==
UpdateMode
.
AFTER_REQUEST
)
{
getEngine
().
getPipeline
().
addValve
(
new
UpdateValve
(
this
));
}
if
(
readMode
==
ReadMode
.
MEMORY
)
{
RTopic
<
AttributeMessage
>
updatesTopic
=
getTopic
();
updatesTopic
.
addListener
(
new
MessageListener
<
AttributeMessage
>()
{
...
...
@@ -292,9 +289,9 @@ public class RedissonSessionManager extends ManagerBase {
if
(
updateMode
==
UpdateMode
.
AFTER_REQUEST
)
{
RedissonSession
sess
=
(
RedissonSession
)
super
.
findSession
(
session
.
getId
());
if
(
sess
!=
null
)
{
sess
.
save
();
sess
.
save
();
}
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录