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;
  ...
}

因此表现得就像你的布尔值是空的。