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 f757f4ae822677e8f2d0bbd5c832442f79a8a585..7da42f27c04260a454f377a793b8f963e72c9ed3 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 4a639fb229414d155b1db570e88b7a8c0aa2eca6..b71b73ea9c07894aa0f5f2bf84036039ea2fffae 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 cfbc5b70b2f8e404390266e96e5593673fbb4853..09e9a2c6c9036c7e69f534d78afd2e0daaa1e8d7 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 678b1aa92dcbc451837301e33b8562c1440256be..2a42100ec5c39155bb869b58262123f46a0cb274 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