EN · DE · RU · FR · ES

#299: WebXMLInitializer.java

projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java Java-класс, projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java 115 строк · 70 кода · 30 комментариев · 15 пустых
Назначение: Исходный файл: org/projectforge/config/WebXMLInitializer.java. WebXMLInitializer.java является частью приложения управления проектами с открытым исходным кодом ProjectForge.

Исходный код (первые 100 строк)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge распространяется по двойной лицензии.
//
// Эта версия для сообщества является бесплатным программным обеспечением; вы можете распространять и/или
// изменять её в соответствии с условиями Стандартной общественной лицензии GNU (GNU General Public License),
// опубликованной Фондом свободного программного обеспечения; версия 3 Лицензии.
//
// Эта версия для сообщества распространяется в надежде, что она будет полезной,
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
// КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. в Стандартной общественной
// лицензии GNU.
//
// Вы должны были получить копию Стандартной общественной лицензии GNU вместе
// с этой программой; если нет, см. http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.config;

import jakarta.servlet.FilterRegistration;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.spring.SpringWebApplicationFactory;
import org.projectforge.business.user.filter.WicketUserFilter;
import org.projectforge.carddav.CardDavInit;
import org.projectforge.framework.configuration.PFSpringConfiguration;
import org.projectforge.model.rest.RestPaths;
import org.projectforge.rest.config.LocaleFilter;
import org.projectforge.rest.config.Rest;
import org.projectforge.rest.config.RestUtils;
import org.projectforge.security.LoggingFilter;
import org.projectforge.security.SecurityHeaderFilter;
import org.projectforge.web.OrphanedLinkFilter;
import org.projectforge.web.filter.ResponseHeaderFilter;
import org.projectforge.web.filter.SpringThreadLocalFilter;
import org.projectforge.web.rest.RestCalendarSubscriptionUserFilter;
import org.projectforge.web.rest.RestUserFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Configuration;

/**
 * Этот класс заменяет web.xml. Он регистрирует фильтр Wicket в стиле конфигурации, поддерживающем Spring.
 *
 * @author Florian Blumenstein
 */
@Configuration
public class WebXMLInitializer implements ServletContextInitializer {
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(WebXMLInitializer.class);

    @Value("${projectforge.security.csp-header-value:}") // по умолчанию пустая строка
    private String cspHeaderValue;

    private static final String PARAM_APP_BEAN = "applicationBean";

    @Autowired
    private CardDavInit cardDavInit;

    @Autowired
    private PFSpringConfiguration pfSpringConfiguration;

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        final FilterRegistration securityHeaderFilter = sc.addFilter("SecurityHeaderFilter", SecurityHeaderFilter.class);
        securityHeaderFilter.addMappingForUrlPatterns(null, false, "/*");
        securityHeaderFilter.setInitParameter(SecurityHeaderFilter.PARAM_CSP_HEADER_VALUE, cspHeaderValue);

        if (pfSpringConfiguration.getCorsFilterEnabled()) {
            log.warn("************* Включение CorsPreflightFilter для разработки. *************");
            FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
            corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
        }
        /*
         * Перенаправление потерянных ссылок из предыдущих версий ProjectForge (например, если ссылки в электронных письмах были изменены из-за миграций или рефакторинга).
         */
        sc.addFilter("redirectOrphanedLinks", new OrphanedLinkFilter()).addMappingForUrlPatterns(null, false, "/*");

        cardDavInit.init(sc);

        boolean filterAfterInternal = false;
        RestUtils.registerFilter(sc, "loggingFilter", LoggingFilter.class, false, "/*");
        RestUtils.registerFilter(sc, "UserFilter", WicketUserFilter.class, filterAfterInternal, "/wa/*");
        RestUtils.registerFilter(sc, "springContext", SpringThreadLocalFilter.class, filterAfterInternal, "/wa/*");

        final FilterRegistration wicketApp = RestUtils.registerFilter(sc, "wicket.app", WicketFilter.class, filterAfterInternal, "/wa/*");
        wicketApp.setInitParameter(WicketFilter.APP_FACT_PARAM, SpringWebApplicationFactory.class.getName());
        wicketApp.setInitParameter(PARAM_APP_BEAN, "wicketApplication");
        wicketApp.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/wa/*");

        sc.addFilter("locale", new LocaleFilter()).addMappingForUrlPatterns(null, false,
                "/" + RestPaths.REST_PUBLIC + "/*"); // Необходимо для сервиса входа.

История Git

868d6abb7 2025 -> 2026
e1658a6a3 CorsPreflightFilter снова добавлен (требуется).
19954eeb1 CorsPreflightFilter не нужен, см. WebXMLInitializer (allowedOrigin не может быть '*').
9a0941e90 CorsPreflightFilter добавлен для разработки.
63081666f Заголовки исходных файлов: 2024-> 2025.

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
index 6f6c6e8d3..dd8af1245 100644
--- a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
+++ b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

e1658a6a3

CorsPreflightFilter снова добавлен (требуется).
e1658a6a32becabc7921f8c4f70a356bd2df2661
diff --git a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
index 7313a96b6..6f6c6e8d3 100644
--- a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
+++ b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
@@ -73,6 +73,11 @@ public class WebXMLInitializer implements ServletContextInitializer {
         securityHeaderFilter.addMappingForUrlPatterns(null, false, "/*");
         securityHeaderFilter.setInitParameter(SecurityHeaderFilter.PARAM_CSP_HEADER_VALUE, cspHeaderValue);
 
+        if (pfSpringConfiguration.getCorsFilterEnabled()) {
+            log.warn("************* Включение CorsPreflightFilter для разработки. *************");
+            FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
+            corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
+        }
         /*
          * Перенаправление потерянных ссылок из предыдущих версий ProjectForge (например, если ссылки в электронных письмах были изменены из-за миграций или рефакторинга).
          */

19954eeb1

CorsPreflightFilter не нужен, см. WebXMLInitializer (allowedOrigin не может быть '*').
19954eeb1d5dd278e48920e103100b1dd10ce230
diff --git a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
index e496e607e..7313a96b6 100644
--- a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
+++ b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
@@ -73,12 +73,6 @@ public class WebXMLInitializer implements ServletContextInitializer {
         securityHeaderFilter.addMappingForUrlPatterns(null, false, "/*");
         securityHeaderFilter.setInitParameter(SecurityHeaderFilter.PARAM_CSP_HEADER_VALUE, cspHeaderValue);
 
-        if (pfSpringConfiguration.getCorsFilterEnabled()) {
-            log.warn("************* Включение CorsPreflightFilter для разработки. *************");
-            FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
-            corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
-        }
-
         /*
          * Перенаправление потерянных ссылок из предыдущих версий ProjectForge (например, если ссылки в электронных письмах были изменены из-за миграций или рефакторинга).
          */

9a0941e90

CorsPreflightFilter добавлен для разработки.
9a0941e90e2295c44a5b1fd6956110ddd530093d
diff --git a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
index 62d79fd51..e496e607e 100644
--- a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
+++ b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
@@ -30,6 +30,7 @@ import org.apache.wicket.protocol.http.WicketFilter;
 import org.apache.wicket.spring.SpringWebApplicationFactory;
 import org.projectforge.business.user.filter.WicketUserFilter;
 import org.projectforge.carddav.CardDavInit;
+import org.projectforge.framework.configuration.PFSpringConfiguration;
 import org.projectforge.model.rest.RestPaths;
 import org.projectforge.rest.config.LocaleFilter;
 import org.projectforge.rest.config.Rest;
@@ -63,12 +64,21 @@ public class WebXMLInitializer implements ServletContextInitializer {
     @Autowired
     private CardDavInit cardDavInit;
 
+    @Autowired
+    private PFSpringConfiguration pfSpringConfiguration;
+
     @Override
     public void onStartup(ServletContext sc) throws ServletException {
         final FilterRegistration securityHeaderFilter = sc.addFilter("SecurityHeaderFilter", SecurityHeaderFilter.class);
         securityHeaderFilter.addMappingForUrlPatterns(null, false, "/*");
         securityHeaderFilter.setInitParameter(SecurityHeaderFilter.PARAM_CSP_HEADER_VALUE, cspHeaderValue);
 
+        if (pfSpringConfiguration.getCorsFilterEnabled()) {
+            log.warn("************* Включение CorsPreflightFilter для разработки. *************");
+            FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
+            corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
+        }
+
         /*
          * Перенаправление потерянных ссылок из предыдущих версий ProjectForge (например, если ссылки в электронных письмах были изменены из-за миграций или рефакторинга).
          */

63081666f

Заголовки исходных файлов: 2024-> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
index fec333df2..62d79fd51 100644
--- a/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
+++ b/projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //