#299: WebXMLInitializer.java
projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java Java class, projectforge-application/src/main/java/org/projectforge/config/WebXMLInitializer.java 115 lines · 70 code · 30 comments · 15 blank
Purpose: Source file: org/projectforge/config/WebXMLInitializer.java. WebXMLInitializer.java is part of the ProjectForge open-source project management application.
Source (first 100 lines)
/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see 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;
/**
* This class is the replacement of the web.xml. It registers the wicket filter in the spring aware configuration style.
*
* @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:}") // defaults to empty string
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("************* Enabling CorsPreflightFilter for development. *************");
FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
}
/*
* Redirect orphaned links from former versions of ProjectForge (e. g. if link in e-mails were changed due to migrations or refactoring.
*/
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 + "/*"); // Needed for login service.
Git History
868d6abb7 2025 -> 2026
e1658a6a3 CorsPreflightFilter added again (required).
19954eeb1 CorsPreflightFilter not needed, see WebXMLInitializer (allowedOrign can't be '*').
9a0941e90 CorsPreflightFilter added for development.
63081666f Source file headers: 2024-> 2025.
868d6abb7
2025 -> 2026868d6abb75cd191a892911ac8e45058932cf9074
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 added again (required).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("************* Enabling CorsPreflightFilter for development. *************");
+ FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
+ corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
+ }
/*
* Redirect orphaned links from former versions of ProjectForge (e. g. if link in e-mails were changed due to migrations or refactoring.
*/ 19954eeb1
CorsPreflightFilter not needed, see WebXMLInitializer (allowedOrign can't be '*').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("************* Enabling CorsPreflightFilter for development. *************");
- FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
- corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
- }
-
/*
* Redirect orphaned links from former versions of ProjectForge (e. g. if link in e-mails were changed due to migrations or refactoring.
*/ 9a0941e90
CorsPreflightFilter added for development.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("************* Enabling CorsPreflightFilter for development. *************");
+ FilterRegistration.Dynamic corsPreflightFilter = sc.addFilter("CorsPreflightFilter", CorsPreflightFilter.class);
+ corsPreflightFilter.addMappingForUrlPatterns(null, false, "/*");
+ }
+
/*
* Redirect orphaned links from former versions of ProjectForge (e. g. if link in e-mails were changed due to migrations or refactoring.
*/ 63081666f
Source file headers: 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.
//