CitizenIntelligenceAgencySpringVaadinServlet.java

/*
 * Copyright 2010-2024 James Pether Sörling
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *	$Id$
 *  $HeadURL$
*/
package com.hack23.cia.web.impl.ui.application;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.DefaultUIProvider;
import com.vaadin.server.UIProvider;
import com.vaadin.server.VaadinServletService;
import com.vaadin.server.VaadinSession;
import com.vaadin.spring.internal.UIScopeImpl;
import com.vaadin.spring.internal.VaadinSessionScope;
import com.vaadin.spring.server.SpringVaadinServlet;

/**
 * The Class CitizenIntelligenceAgencySpringVaadinServlet.
 */
@WebServlet(value = "/*", loadOnStartup = 2, asyncSupported = true)
@VaadinServletConfiguration(productionMode = true, ui = CitizenIntelligenceAgencyUI.class, widgetset = "com.hack23.cia.web.widgets.WebWidgetSet")
public final class CitizenIntelligenceAgencySpringVaadinServlet extends SpringVaadinServlet {

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor for CitizenIntelligenceAgencySpringVaadinServlet.
	 */
	public CitizenIntelligenceAgencySpringVaadinServlet() {
		// Default constructor
	}

	@Override
	protected void service(final HttpServletRequest request, final HttpServletResponse response)
			throws ServletException, IOException {
		response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
		super.service(request, response);
	}

	@Override
	protected void servletInitialized() throws ServletException {
		final VaadinServletService service = getService();
		service.addSessionInitListener(event -> {
			final VaadinSession session = event.getSession();
			for (final UIProvider provider : session.getUIProviders()) {
				if (DefaultUIProvider.class.getCanonicalName().equals(provider.getClass().getCanonicalName())) {
					session.removeUIProvider(provider);
				}
			}
			session.addUIProvider(new CustomSpringUIProvider(session));
		});
		service.addSessionDestroyListener(event -> {
			final VaadinSession session = event.getSession();
			UIScopeImpl.cleanupSession(session);
			VaadinSessionScope.cleanupSession(session);
		});
	}
}