From c77da2937568c4cac9dba969371c7b4dcd6f89fa Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@apache.org>
Date: Thu, 14 Mar 2019 12:05:19 +0900
Subject: [PATCH] fix #2045 add session.tracking.modes

---
 .../java/org/codelibs/fess/helper/ViewHelper.java |  5 +++++
 .../fess/mylasta/direction/FessConfig.java        | 15 +++++++++++++++
 .../codelibs/fess/mylasta/direction/FessProp.java |  7 +++++++
 src/main/resources/fess_config.properties         |  2 ++
 4 files changed, 29 insertions(+)

diff --git a/src/main/java/org/codelibs/fess/helper/ViewHelper.java b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
index 0639aef7c..87b19729e 100644
--- a/src/main/java/org/codelibs/fess/helper/ViewHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/ViewHelper.java
@@ -38,6 +38,8 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
+import javax.servlet.ServletContext;
+import javax.servlet.SessionTrackingMode;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
@@ -145,6 +147,9 @@ public class ViewHelper {
         highlightTagPost = fessConfig.getQueryHighlightTagPost();
         highlightedFields = fessConfig.getQueryHighlightContentDescriptionFieldsAsArray();
         fessConfig.getQueryHighlightTerminalChars().codePoints().forEach(hihglightTerminalCharSet::add);
+        final ServletContext servletContext = ComponentUtil.getComponent(ServletContext.class);
+        servletContext.setSessionTrackingModes(fessConfig.getSessionTrackingModesAsSet().stream().map(s -> SessionTrackingMode.valueOf(s))
+                .collect(Collectors.toSet()));
     }
 
     public String getContentTitle(final Map<String, Object> document) {
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
index de51ffe76..d25c0cc9c 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
@@ -854,6 +854,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
     /** The key of the configuration. e.g. FES */
     String COOKIE_REMEMBER_ME_HARBOR_KEY = "cookie.remember.me.harbor.key";
 
+    /** The key of the configuration. e.g. cookie */
+    String SESSION_TRACKING_MODES = "session.tracking.modes";
+
     /** The key of the configuration. e.g. 25 */
     String PAGING_PAGE_SIZE = "paging.page.size";
 
@@ -4043,6 +4046,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
      */
     String getCookieRememberMeHarborKey();
 
+    /**
+     * Get the value for the key 'session.tracking.modes'. <br>
+     * The value is, e.g. cookie <br>
+     * @return The value of found property. (NotNull: if not found, exception but basically no way)
+     */
+    String getSessionTrackingModes();
+
     /**
      * Get the value for the key 'paging.page.size'. <br>
      * The value is, e.g. 25 <br>
@@ -7441,6 +7451,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
             return get(FessConfig.COOKIE_REMEMBER_ME_HARBOR_KEY);
         }
 
+        public String getSessionTrackingModes() {
+            return get(FessConfig.SESSION_TRACKING_MODES);
+        }
+
         public String getPagingPageSize() {
             return get(FessConfig.PAGING_PAGE_SIZE);
         }
@@ -8823,6 +8837,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
             defaultMap.put(FessConfig.COOKIE_DEFAULT_EXPIRE, "3600");
             defaultMap.put(FessConfig.COOKIE_ETERNAL_EXPIRE, "86400");
             defaultMap.put(FessConfig.COOKIE_REMEMBER_ME_HARBOR_KEY, "FES");
+            defaultMap.put(FessConfig.SESSION_TRACKING_MODES, "cookie");
             defaultMap.put(FessConfig.PAGING_PAGE_SIZE, "25");
             defaultMap.put(FessConfig.PAGING_PAGE_RANGE_SIZE, "5");
             defaultMap.put(FessConfig.PAGING_PAGE_RANGE_FILL_LIMIT, "true");
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
index e36022297..eef4f6ee1 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
@@ -1992,4 +1992,11 @@ public interface FessProp {
 
     }
 
+    String getSessionTrackingModes();
+
+    default Set<String> getSessionTrackingModesAsSet() {
+        return split(getSessionTrackingModes(), ",")
+                .get(stream -> stream.map(s -> s.trim().toUpperCase(Locale.ENGLISH)).collect(Collectors.toSet()));
+    }
+
 }
diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties
index dd6dc0992..588e27b2b 100644
--- a/src/main/resources/fess_config.properties
+++ b/src/main/resources/fess_config.properties
@@ -457,6 +457,8 @@ cookie.eternal.expire = 86400
 # The cookie key of remember-me for Fess
 cookie.remember.me.harbor.key = FES
 
+session.tracking.modes=cookie
+
 # ----------------------------------------------------------
 #                                                     Paging
 #                                                     ------
-- 
GitLab