springsession生成sessionid不一致問題解決


不廢話,本人遇到的問題主要是兩個不同的springboot版本,需要共享sessionid。

1.配置application

#cookie作用域
server.servlet.session.cookie.path=/
server.servlet.session.cookie.max-age=-1
server.servlet.session.cookie.http-only=false
server.servlet.session.cookie.name=SESSIONIDS


2.繼承springsession默認的DefaultCookieSerializer類,可以設置cookie的基本參數
public class DynamicCookieMaxAgeCookieSerializer extends DefaultCookieSerializer {
private static final Logger LOGGER = LoggerFactory.getLogger(DynamicCookieMaxAgeCookieSerializer.class);

public static final String COOKIE_MAX_AGE = "cookie.max-age";
@Value("${server.servlet.session.cookie.path}")
private String cookiePathValue ;
@Value("${server.servlet.session.cookie.max-age}")
private Integer cookieMaxAge;

@Override
public void writeCookieValue(CookieValue cookieValue) {
HttpServletRequest request = cookieValue.getRequest();
// 從request域讀取到cookie的maxAge屬性
Object attribute = request.getAttribute(COOKIE_MAX_AGE);
if (attribute != null) {
cookieValue.setCookieMaxAge((int) attribute);
} else {
// 如果未設置,就使用默認cookie的生命周期
cookieValue.setCookieMaxAge(this.cookieMaxAge);
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("動態設置cooke.max-age={}", cookieValue.getCookieMaxAge());
}
super.writeCookieValue(cookieValue);
}

@Override
public void setCookiePath(String cookiePath) {
super.setCookiePath(cookiePathValue);
}
}
3.IOC
@Configuration
//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SpringSessionConfiguration {
@Value("${server.servlet.session.cookie.name}")
private String cookieName;

/* @Value("${server.servlet.session.cookie.secure}")
private Boolean cookieSecure;*/

// @Value("${server.servlet.session.cookie.max-age}")
// private Integer cookieMaxAge;
//server.servlet.session.cookie.path
@Value("${server.servlet.session.cookie.path}")
private String cookiePath;

@Value("${server.servlet.session.cookie.http-only}")
private Boolean cookieHttpOnly;

/* @Value("${server.servlet.session.cookie.same-site}")
private String cookieSameSite;*/

@Bean
public CookieSerializer cookieSerializer() {
DynamicCookieMaxAgeCookieSerializer serializer = new DynamicCookieMaxAgeCookieSerializer();
serializer.setCookieName(this.cookieName);
// serializer.setCookieMaxAge(this.cookieMaxAge);
//serializer.setSameSite(this.cookieSameSite);
serializer.setUseHttpOnlyCookie(this.cookieHttpOnly);
serializer.setCookiePath(cookiePath);
serializer.setSameSite(null);
return serializer;
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM