提交 fc252e6d 编写于 作者: 街头小贩's avatar 街头小贩

修正cookie存储时refresh后无法再恢复

上级 26edc29d
......@@ -53,7 +53,8 @@ public abstract class OnlineMemberCookieStorage implements OnlineMemberStorage{
data.put("role", role.getSymbol()+"");
//过期日期
LocalDateTime expireDate = DateTimeUtils.parseDate(data.get("expire"));
String ss = new StorageSerialize(request.getParameter("token"), Commons.toJson(data)).toString();
String memberSerialJSON = Commons.toJson(data);
String ss = new StorageSerialize(Commons.optional(()->request.getParameter("token"), Commons.randomAlphaNumeric(8)), CookieUtils.encodeCookieValue(memberSerialJSON, NP)).toString();
if (Commons.isNotBlank(ss)) {
serializeCookie(ss, expireDate, request, response, metaConfig.getName(), metaConfig.getPath(), metaConfig.getDomain(), metaConfig.isHttps());
}
......
package com.apobates.forum.member.storage.ehcache;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* OnlineMemberEhcacheStorage条件
*
* @author xiaofanku
* @since 20201001
*/
public class EhcacheMemberStorageCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment env = context.getEnvironment();
return null != env && "true".equalsIgnoreCase(env.getProperty("site.member.ehcache"));
}
}
package com.apobates.forum.member.storage.ehcache;
import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberRoleEnum;
import com.apobates.forum.member.entity.MemberStatusEnum;
import com.apobates.forum.member.storage.MetaConfig;
import com.apobates.forum.member.storage.OnlineMemberStorage;
import com.apobates.forum.member.storage.core.MemberSessionBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Optional;
/**
* 使用Ehcache存储会员在线信息
*
* @author xiaofanku
* @since 20201001
*/
public class OnlineMemberEhcacheStorage implements OnlineMemberStorage {
@Autowired
private MetaConfig metaConfig;
private final static Logger logger = LoggerFactory.getLogger(OnlineMemberEhcacheStorage.class);
/*
public OnlineMemberEhcacheStorage(MetaConfig metaConfig) {
this.metaConfig = metaConfig;
}*/
@Override
public void store(MemberSessionBean memberSessionBean, HttpServletRequest request, HttpServletResponse response) {
}
@Override
public void delete(HttpServletRequest request, HttpServletResponse response) {
}
@Override
public Optional<MemberSessionBean> getInstance(HttpServletRequest request, String sentinel) {
return Optional.empty();
}
@Override
public void refresh(HttpServletRequest request, HttpServletResponse response, MemberStatusEnum status, MemberGroupEnum group, MemberRoleEnum role) {
}
@Override
public boolean isSupportRevival() {
return true;
}
@Override
public MetaConfig getMetaConfig() {
return metaConfig;
}
}
package com.apobates.forum.trident;
import java.util.List;
import com.apobates.forum.member.storage.ehcache.EhcacheMemberStorageCondition;
import com.apobates.forum.member.storage.ehcache.OnlineMemberEhcacheStorage;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
......@@ -10,6 +13,7 @@ import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.http.MediaType;
import org.springframework.lang.Nullable;
import org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver;
import org.springframework.mobile.device.DeviceResolverHandlerInterceptor;
import org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver;
......@@ -242,8 +246,17 @@ public class TridentFrontConfig implements WebMvcConfigurer{
}
@Bean(name="onlineMemberStorage")
public OnlineMemberStorage getMemberStorage(CookieMetaConfig cookieConfig){
return new com.apobates.forum.member.storage.cookie.HttpCookieProvider(cookieConfig);
public OnlineMemberStorage getMemberStorage(CookieMetaConfig cookieConfig, @Nullable OnlineMemberEhcacheStorage ehcacheStorageProvider){
if(null == ehcacheStorageProvider) {
return new com.apobates.forum.member.storage.cookie.HttpCookieProvider(cookieConfig);
}
return ehcacheStorageProvider;
}
@Bean("ehcacheStorageProvider")
@Conditional(EhcacheMemberStorageCondition.class)
public OnlineMemberEhcacheStorage getMemberEhacheStorage(){
//ehcache
return new com.apobates.forum.member.storage.ehcache.OnlineMemberEhcacheStorage();
}
//图片存储
@Bean(name="imageIOConfig")
......
......@@ -24,6 +24,8 @@ site.defat.avtar=avatar
site.member.freeze=10
site.member.invite=false
site.member.register=true
# true use ehcache, false use cookie storage MemberSessionBean
site.member.ehcache=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
site.upload.fail=static/image/photo_album.jpg
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册