From 29869bfdcb996ff83dc330fd997c473b9b531138 Mon Sep 17 00:00:00 2001 From: xiaofanku Date: Fri, 2 Oct 2020 00:43:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E5=8A=A8RedisMemberStorageCondition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/OnlineMemberRedisStorage.java | 64 ++++++++----------- .../redis}/RedisMemberStorageCondition.java | 2 +- .../forum/thrones/ThronesFrontConfig.java | 4 +- thrones/src/main/resources/global.properties | 2 +- 4 files changed, 31 insertions(+), 41 deletions(-) rename thrones/src/main/java/com/apobates/forum/{thrones/controller/helper => member/storage/redis}/RedisMemberStorageCondition.java (91%) diff --git a/thrones/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java b/thrones/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java index f757f4ae..7da42f27 100644 --- a/thrones/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java +++ b/thrones/src/main/java/com/apobates/forum/member/storage/redis/OnlineMemberRedisStorage.java @@ -58,17 +58,10 @@ public class OnlineMemberRedisStorage implements OnlineMemberStorage{ } } } + @Override public void refresh(HttpServletRequest request, HttpServletResponse response, MemberStatusEnum status, MemberGroupEnum group, MemberRoleEnum role){ - if(!isContinue()){ - return; - } - Cookie cookie = CookieUtils.queryCookie(request, metaConfig.getName()).orElse(null); - if (null == cookie) { - return; - } - String passStub = cookie.getValue(); - Optional afterPart = hash(passStub, Commons.getRequestIp(request)); //前缀:hashValue + Optional afterPart = getRedisKey(request); //前缀:hashValue if (afterPart.isPresent()) { Map data = new HashMap<>(); data.put("status", status.getSymbol()+""); @@ -80,41 +73,17 @@ public class OnlineMemberRedisStorage implements OnlineMemberStorage{ template.opsForHash().putAll(redisKey, data); } } - + @Override public void delete(HttpServletRequest request, HttpServletResponse response) { - if(!isContinue()){ - return; - } - Cookie cookie = CookieUtils.queryCookie(request, metaConfig.getName()).orElse(null); - if (null == cookie) { - return; - } - String passStub = cookie.getValue(); - Optional afterPart = hash(passStub, Commons.getRequestIp(request)); //前缀:hashValue + Optional afterPart = getRedisKey(request); //前缀:hashValue if (afterPart.isPresent()) { if (template.delete(metaConfig.getName() + ":" + afterPart.get())) { expireCookie(request, response, metaConfig.getName(), metaConfig.getPath(), metaConfig.getDomain()); } } } - private Map getStoreStruct(HttpServletRequest request){ - if(!isContinue()){ - return Collections.emptyMap(); - } - Cookie cookie = CookieUtils.queryCookie(request, metaConfig.getName()).orElse(null); - if (null == cookie) { - return Collections.emptyMap(); - } - String passStub = cookie.getValue(); - Optional afterPart = hash(passStub, Commons.getRequestIp(request)); //前缀:hashValue - if (afterPart.isPresent()) { - String redisKey = metaConfig.getName() + ":" + afterPart.get(); - HashOperations operation = template.opsForHash(); - return operation.entries(redisKey); - } - return Collections.emptyMap(); - } + @Override public Optional getInstance(HttpServletRequest request, String sentinel) { Map data = getStoreStruct(request); @@ -137,7 +106,28 @@ public class OnlineMemberRedisStorage implements OnlineMemberStorage{ private boolean isContinue(){ return null != template; } - + + private Optional getRedisKey(HttpServletRequest request){ + if(!isContinue()){ + return Optional.empty(); + } + Cookie cookie = CookieUtils.queryCookie(request, metaConfig.getName()).orElse(null); + if (null == cookie) { + return Optional.empty(); + } + String passStub = cookie.getValue(); + return hash(passStub, Commons.getRequestIp(request)); //前缀:hashValue + } + + private Map getStoreStruct(HttpServletRequest request){ + Optional afterPart = getRedisKey(request); //前缀:hashValue + if (afterPart.isPresent()) { + String redisKey = metaConfig.getName() + ":" + afterPart.get(); + HashOperations operation = template.opsForHash(); + return operation.entries(redisKey); + } + return Collections.emptyMap(); + } /** * 序列化会员信息到Cookie中 * diff --git a/thrones/src/main/java/com/apobates/forum/thrones/controller/helper/RedisMemberStorageCondition.java b/thrones/src/main/java/com/apobates/forum/member/storage/redis/RedisMemberStorageCondition.java similarity index 91% rename from thrones/src/main/java/com/apobates/forum/thrones/controller/helper/RedisMemberStorageCondition.java rename to thrones/src/main/java/com/apobates/forum/member/storage/redis/RedisMemberStorageCondition.java index 4a639fb2..b71b73ea 100644 --- a/thrones/src/main/java/com/apobates/forum/thrones/controller/helper/RedisMemberStorageCondition.java +++ b/thrones/src/main/java/com/apobates/forum/member/storage/redis/RedisMemberStorageCondition.java @@ -1,4 +1,4 @@ -package com.apobates.forum.thrones.controller.helper; +package com.apobates.forum.member.storage.redis; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; diff --git a/thrones/src/main/java/com/apobates/forum/thrones/ThronesFrontConfig.java b/thrones/src/main/java/com/apobates/forum/thrones/ThronesFrontConfig.java index cfbc5b70..09e9a2c6 100644 --- a/thrones/src/main/java/com/apobates/forum/thrones/ThronesFrontConfig.java +++ b/thrones/src/main/java/com/apobates/forum/thrones/ThronesFrontConfig.java @@ -9,7 +9,7 @@ import com.apobates.forum.member.storage.redis.OnlineMemberRedisStorage; import com.apobates.forum.thrones.controller.helper.AuthenticationInterceptor; import com.apobates.forum.thrones.controller.helper.MemberInviteCodeInterceptorAdapter; import com.apobates.forum.thrones.controller.helper.OnlineDescriptorAspect; -import com.apobates.forum.thrones.controller.helper.RedisMemberStorageCondition; +import com.apobates.forum.member.storage.redis.RedisMemberStorageCondition; import com.apobates.forum.thrones.controller.helper.RegisteChannelInterceptor; import com.apobates.forum.thrones.controller.helper.StrategyInterceptorAdapter; import com.apobates.forum.thrones.rss.TopicRssView; @@ -215,7 +215,7 @@ public class ThronesFrontConfig implements WebMvcConfigurer { } return redisStorageProvider; } - @Bean + @Bean("redisStorageProvider") @Conditional(RedisMemberStorageCondition.class) public OnlineMemberRedisStorage getMemberRedisStorage(){ //redis diff --git a/thrones/src/main/resources/global.properties b/thrones/src/main/resources/global.properties index 678b1aa9..2a42100e 100644 --- a/thrones/src/main/resources/global.properties +++ b/thrones/src/main/resources/global.properties @@ -27,7 +27,7 @@ site.defat.avtar=avatar site.member.freeze=10 site.member.invite=false site.member.register=true -# true used redis false used cookie +# true use redis, false use cookie storage MemberSessionBean site.member.redis=false site.meta.description=In this tutorial we show a Spring MVC RSS ATOM Content Negotiation example. Using Content Negotiation we can serve different versions of a document (or resource) at the same URI. # \u83b7\u53d6\u5931\u8d25\u65f6\u663e\u793a\u7684\u56fe\u7247 -- GitLab