Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
街头小贩
Jforum2
提交
7f9c46a0
J
Jforum2
项目概览
街头小贩
/
Jforum2
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jforum2
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7f9c46a0
编写于
9月 08, 2020
作者:
街头小贩
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
删除member.storage.redis模块
上级
0650ed47
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
0 addition
and
305 deletion
+0
-305
member.storage.redis/nb-configuration.xml
member.storage.redis/nb-configuration.xml
+0
-19
member.storage.redis/pom.xml
member.storage.redis/pom.xml
+0
-59
member.storage.redis/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java
.../forum/member/storage/redis/OnlineMemberRedisStorage.java
+0
-187
member.storage.redis/src/main/java/com/apobates/forum/member/storage/redis/RedisCookieProvider.java
...bates/forum/member/storage/redis/RedisCookieProvider.java
+0
-32
member.storage.redis/src/main/java/module-info.java
member.storage.redis/src/main/java/module-info.java
+0
-8
未找到文件。
member.storage.redis/nb-configuration.xml
已删除
100644 → 0
浏览文件 @
0650ed47
<?xml version="1.0" encoding="UTF-8"?>
<project-shared-configuration>
<!--
This file contains additional configuration written by modules in the NetBeans IDE.
The configuration is intended to be shared among all the users of project and
therefore it is assumed to be part of version control checkout.
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
-->
<properties
xmlns=
"http://www.netbeans.org/ns/maven-properties-data/1"
>
<!--
Properties that influence various parts of the IDE, especially code formatting and the like.
You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
<netbeans.hint.jdkPlatform>
JDK_11
</netbeans.hint.jdkPlatform>
<org-netbeans-modules-javascript2-requirejs.enabled>
true
</org-netbeans-modules-javascript2-requirejs.enabled>
</properties>
</project-shared-configuration>
member.storage.redis/pom.xml
已删除
100644 → 0
浏览文件 @
0650ed47
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.apobates
</groupId>
<artifactId>
jforum2
</artifactId>
<version>
0.1-SNAPSHOT
</version>
</parent>
<artifactId>
member.storage.redis
</artifactId>
<packaging>
jar
</packaging>
<properties>
<maven.compiler.source>
11
</maven.compiler.source>
<maven.compiler.target>
11
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
redis.clients
</groupId>
<artifactId>
jedis
</artifactId>
<version>
2.10.2
</version>
<type>
jar
</type>
<scope>
compile
</scope>
</dependency>
<dependency>
<groupId>
com.apobates
</groupId>
<artifactId>
member.storage
</artifactId>
<version>
${project.version}
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>
javax.servlet
</groupId>
<artifactId>
javax.servlet-api
</artifactId>
<version>
4.0.1
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
${junit.version}
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.1
</version>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
2.20
</version>
<configuration>
<argLine>
-Dfile.encoding=UTF-8 -Xms1024m -Xmx1G -XX:PermSize=1024m -noverify
</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
member.storage.redis/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java
已删除
100644 → 0
浏览文件 @
0650ed47
package
com.apobates.forum.member.storage.redis
;
import
com.apobates.forum.utils.CookieUtils
;
import
com.apobates.forum.member.storage.MetaConfig
;
import
com.apobates.forum.member.storage.OnlineMemberStorage
;
import
com.apobates.forum.member.storage.cookie.CookieMetaConfig
;
import
com.apobates.forum.member.storage.core.MemberSessionBean
;
import
com.apobates.forum.utils.Commons
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.UUID
;
import
javax.servlet.http.Cookie
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
redis.clients.jedis.Jedis
;
import
redis.clients.jedis.JedisPool
;
/**
* 使用Redis存储会员在线信息,Cookie中存储的是票根
* 支持redis 3.0.5
* @author xiaofanku
* @since 20200905
*/
public
abstract
class
OnlineMemberRedisStorage
implements
OnlineMemberStorage
{
private
final
CookieMetaConfig
metaConfig
;
private
final
JedisPool
jedisPool
;
private
final
static
Logger
logger
=
LoggerFactory
.
getLogger
(
OnlineMemberRedisStorage
.
class
);
public
OnlineMemberRedisStorage
(
CookieMetaConfig
metaConfig
,
JedisPool
jedisPool
)
{
super
();
this
.
metaConfig
=
metaConfig
;
this
.
jedisPool
=
jedisPool
;
}
@Override
public
void
store
(
MemberSessionBean
memberSessionBean
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
String
passStub
=
rndStub
();
Optional
<
String
>
afterPart
=
hash
(
passStub
,
memberSessionBean
.
getIpAddr
());
//前缀:hashValue
Map
<
String
,
String
>
val
=
generateRedisJsonValue
(
memberSessionBean
);
if
(
afterPart
.
isPresent
()
&&
null
!=
val
&&
!
val
.
isEmpty
()){
String
key
=
metaConfig
.
getName
()+
":"
+
afterPart
.
get
();
try
(
Jedis
jedis
=
jedisPool
.
getResource
()){
String
result
=
jedis
.
hmset
(
key
,
val
);
if
(
"OK"
.
equals
(
result
)){
jedis
.
expire
(
key
,
86400
);
serializeCookie
(
passStub
,
request
,
response
,
metaConfig
.
getName
(),
metaConfig
.
getPath
(),
metaConfig
.
getDomain
(),
metaConfig
.
isHttps
());
}
}
}
}
@Override
public
Optional
<
MemberSessionBean
>
query
(
long
memberId
)
{
return
Optional
.
empty
();
}
@Override
public
void
delete
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
Cookie
cookie
=
CookieUtils
.
queryCookie
(
request
,
metaConfig
.
getName
()).
orElse
(
null
);
if
(
null
==
cookie
)
{
return
;
}
String
passStub
=
cookie
.
getValue
();
Optional
<
String
>
afterPart
=
hash
(
passStub
,
Commons
.
getRequestIp
(
request
));
//前缀:hashValue
if
(
afterPart
.
isPresent
()){
try
(
Jedis
jedis
=
jedisPool
.
getResource
()){
if
(
jedis
.
del
(
metaConfig
.
getName
()+
":"
+
afterPart
.
get
())>
0
){
expireCookie
(
request
,
response
,
metaConfig
.
getName
(),
metaConfig
.
getPath
(),
metaConfig
.
getDomain
());
}
}
}
}
@Override
public
Optional
<
MemberSessionBean
>
getInstance
(
HttpServletRequest
request
,
String
sentinel
)
{
Cookie
cookie
=
CookieUtils
.
queryCookie
(
request
,
metaConfig
.
getName
()).
orElse
(
null
);
if
(
null
==
cookie
)
{
return
Optional
.
empty
();
}
String
passStub
=
cookie
.
getValue
();
Optional
<
String
>
afterPart
=
hash
(
passStub
,
Commons
.
getRequestIp
(
request
));
//前缀:hashValue
if
(
afterPart
.
isPresent
()){
String
redisKey
=
metaConfig
.
getName
()+
":"
+
afterPart
.
get
();
try
(
Jedis
jedis
=
jedisPool
.
getResource
()){
Map
<
String
,
String
>
val
=
jedis
.
hgetAll
(
redisKey
);
if
(
null
!=
val
&&
!
val
.
isEmpty
()){
return
restoreRedisJsonValue
(
val
,
request
,
sentinel
);
}
}
}
return
Optional
.
empty
();
}
@Override
public
boolean
isSupportRevival
()
{
return
true
;
}
@Override
public
MetaConfig
getMetaConfig
()
{
return
metaConfig
;
}
/**
* 生成redis中key对应的值
*
* @param memberSessionBean
* @return
*/
protected
abstract
Map
<
String
,
String
>
generateRedisJsonValue
(
MemberSessionBean
memberSessionBean
);
/**
* getInstance方法的模板方法
*
* @param jsonValue 值
* @param request Http请求对象
* @param sentinel 一个标识从哪事变的
* @return
*/
protected
abstract
Optional
<
MemberSessionBean
>
restoreRedisJsonValue
(
Map
<
String
,
String
>
jsonValue
,
HttpServletRequest
request
,
String
sentinel
);
/**
* 序列化会员信息到Cookie中 A positive value indicates that the cookie will expire
* after that many seconds have passed.Note that the value is the maximum
age when the cookie will expire, not the cookie's current age. A negative
value means that the cookie is not stored persistently and will be
deleted when the Web browser exits. A zero value causes the cookie to be
deleted.
*
* @param cookieValue cookie中保存的值
* @param request
* @param response Http响应对象
* @param cookieSymbol cookie的Key
* @param cookiePath cookie的路径
* @param cookieDomain cookie的域名
* @param isHttps work on HTTPS/true,false work on http
*/
protected
void
serializeCookie
(
String
cookieValue
,
HttpServletRequest
request
,
HttpServletResponse
response
,
String
cookieSymbol
,
String
cookiePath
,
String
cookieDomain
,
boolean
isHttps
)
{
try
{
CookieUtils
.
serializeCookie
(
cookieValue
,
60
*
60
*
24
*
1
,
request
,
response
,
cookieSymbol
,
cookiePath
,
cookieDomain
,
isHttps
);
}
catch
(
IllegalStateException
e
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
"[OM][CS]write cookie fail, reason: "
+
e
.
getMessage
(),
e
);
}
}
}
/**
* 清空Cookie中的会员信息
*
* @param request Http请求对象
* @param response Http响应对象
* @param cookieSymbol cookie的Key
* @param cookiePath cookie的路径
* @param cookieDomain cookie的域名
*/
protected
void
expireCookie
(
HttpServletRequest
request
,
HttpServletResponse
response
,
String
cookieSymbol
,
String
cookiePath
,
String
cookieDomain
)
{
CookieUtils
.
expireCookie
(
request
,
response
,
cookieSymbol
,
cookiePath
,
cookieDomain
);
}
/**
*
* @param stub 长度12位
* @param ipAddr ipv4
* @return
*/
private
Optional
<
String
>
hash
(
String
stub
,
String
ipAddr
){
//redis key的长度
if
(!
Commons
.
isNotBlank
(
stub
)
||
!
Commons
.
isNotBlank
(
ipAddr
)){
return
Optional
.
empty
();
}
return
Optional
.
of
(
stub
);
}
private
String
rndStub
(){
return
UUID
.
randomUUID
().
toString
().
substring
(
24
);
}
}
\ No newline at end of file
member.storage.redis/src/main/java/com/apobates/forum/member/storage/redis/RedisCookieProvider.java
已删除
100644 → 0
浏览文件 @
0650ed47
package
com.apobates.forum.member.storage.redis
;
import
com.apobates.forum.member.storage.cookie.CookieMetaConfig
;
import
com.apobates.forum.member.storage.core.MemberSessionBean
;
import
com.apobates.forum.member.storage.core.MemberSessionBeanConverter
;
import
com.apobates.forum.utils.Commons
;
import
java.util.Map
;
import
java.util.Optional
;
import
javax.servlet.http.HttpServletRequest
;
import
redis.clients.jedis.JedisPool
;
/**
* OnlineMemberRedisStorage的实现类
*
* @author xiaofanku
* @since 20200905
*/
public
class
RedisCookieProvider
extends
OnlineMemberRedisStorage
{
public
RedisCookieProvider
(
CookieMetaConfig
metaConfig
,
JedisPool
jedisPool
)
{
super
(
metaConfig
,
jedisPool
);
}
@Override
protected
Map
<
String
,
String
>
generateRedisJsonValue
(
MemberSessionBean
memberSessionBean
)
{
return
MemberSessionBeanConverter
.
toMap
(
memberSessionBean
);
}
@Override
protected
Optional
<
MemberSessionBean
>
restoreRedisJsonValue
(
Map
<
String
,
String
>
jsonValue
,
HttpServletRequest
request
,
String
sentinel
)
{
return
MemberSessionBeanConverter
.
toInstance
(
jsonValue
,
Commons
.
getRequestIp
(
request
),
sentinel
);
}
}
\ No newline at end of file
member.storage.redis/src/main/java/module-info.java
已删除
100644 → 0
浏览文件 @
0650ed47
module
MemberStorageRedis
{
requires
jedis
;
requires
MemberStorage
;
requires
Member
;
requires
Utils
;
requires
javax
.
servlet
.
api
;
requires
org
.
slf4j
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录