/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.filter; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.geoserver.ows.util.ResponseUtils; import org.geoserver.security.config.SSLFilterConfig; import org.geoserver.security.config.SecurityNamedServiceConfig; /** * Servlet filter redirecting HTTP requests to * HTTPS requests * * * @author mcr * */ public class GeoServerSSLFilter extends GeoServerSecurityFilter { protected Integer sslPort ; @Override public void initializeFromConfig(SecurityNamedServiceConfig config) throws IOException { super.initializeFromConfig(config); SSLFilterConfig sslConfig = (SSLFilterConfig) config; sslPort=sslConfig.getSslPort(); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (request.isSecure()) { chain.doFilter(request, response); return; } HttpServletRequest httpRequest = (HttpServletRequest) request; StringBuffer buff = new StringBuffer("https://"); buff.append(httpRequest.getServerName()).append(":") .append(sslPort).append(httpRequest.getContextPath()).append(httpRequest.getServletPath()); Map<String,String> kvp = new HashMap<String,String>(); if (httpRequest.getQueryString()!=null) { for (String kvpString : httpRequest.getQueryString().split("&")) { String[] kvpArray = kvpString.split("="); if (kvpArray == null || kvpArray.length!=2) { LOGGER.warning("Unknown query parameter: "+kvpString); continue; } kvp.put(kvpArray[0],kvpArray[1]); } } String redirectURL = ResponseUtils.buildURL(buff.toString(), httpRequest.getPathInfo(), kvp, null); if (LOGGER.isLoggable(Level.INFO)) LOGGER.info("Redirecting "+httpRequest.getRequestURL()+ " to "+redirectURL); ((HttpServletResponse)response).sendRedirect(redirectURL); } }