spring-boot 无法获取 hazelcast.sessionId 带有安全和 http-only 的 cookie
spring-boot can't get hazelcast.sessionId cookie with secure and http-only
将 spring-boot 2.17 与 hazelcast 3.11 和 tomcat 9.0.39 一起使用。
我已经设置了一个 WebFilter bean:
@Bean
public WebFilter webFilter(HazelcastInstance hazelcastInstance) {
Properties properties = new Properties();
properties.put("instance-name", hazelcastInstance.getName());
properties.put("sticky-session", "false");
properties.put("map-name", "httpSessions");
properties.put("cookie-path", "/");
properties.put("cookie-secure", true);
properties.put("cookie-http-only", true);
return new WebFilter(properties);
}
但是 hazelcast.sessionId cookie 并没有以 secure=true 和 http-only=true 结束。
也许有任何解决方法?
谢谢
您应该将布尔属性放入字符串值:
properties.put("cookie-secure", "true");
properties.put("cookie-http-only", "true");
如果您想知道其原因,这是因为 java.util.Properties#getProperty
WebFilter 内部使用的行为。看起来像:
public String getProperty(String key) {
Object oval = map.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
...
}
因此表现得就像你的布尔值是空的。
将 spring-boot 2.17 与 hazelcast 3.11 和 tomcat 9.0.39 一起使用。
我已经设置了一个 WebFilter bean:
@Bean
public WebFilter webFilter(HazelcastInstance hazelcastInstance) {
Properties properties = new Properties();
properties.put("instance-name", hazelcastInstance.getName());
properties.put("sticky-session", "false");
properties.put("map-name", "httpSessions");
properties.put("cookie-path", "/");
properties.put("cookie-secure", true);
properties.put("cookie-http-only", true);
return new WebFilter(properties);
}
但是 hazelcast.sessionId cookie 并没有以 secure=true 和 http-only=true 结束。
也许有任何解决方法?
谢谢
您应该将布尔属性放入字符串值:
properties.put("cookie-secure", "true");
properties.put("cookie-http-only", "true");
如果您想知道其原因,这是因为 java.util.Properties#getProperty
WebFilter 内部使用的行为。看起来像:
public String getProperty(String key) {
Object oval = map.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
...
}
因此表现得就像你的布尔值是空的。