package cms.util; import cms.controller.IndexController; import java.io.IOException; import java.util.Locale; import java.util.TimeZone; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slim3.controller.ControllerConstants; import org.slim3.controller.FrontController; import org.slim3.controller.validator.Errors; import org.slim3.util.ApplicationMessage; import org.slim3.util.CipherFactory; import org.slim3.util.LocaleLocator; import org.slim3.util.RequestLocator; import org.slim3.util.RequestUtil; import org.slim3.util.ResponseLocator; import org.slim3.util.TimeZoneLocator; public class FrontendFilter extends FrontController { @Override public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { if (request.getCharacterEncoding() == null) { request.setCharacterEncoding(charset); } HttpServletRequest previousRequest = RequestLocator.get(); RequestLocator.set(request); HttpServletResponse previousResponse = ResponseLocator.get(); ResponseLocator.set(response); Locale previousLocale = LocaleLocator.get(); LocaleLocator.set(processLocale(request)); TimeZone previousTimeZone = TimeZoneLocator.get(); TimeZoneLocator.set(processTimeZone(request)); ApplicationMessage.setBundle(bundleName, LocaleLocator.get()); CipherFactory.getFactory().clearLimitedKey(); try { String basePath = RequestUtil.getPath(request); if (basePath.startsWith("/_ah/")) { chain.doFilter(request, response); } basePath = basePath.substring(1); // remove starting / Errors errors = (Errors) request.getAttribute(ControllerConstants.ERRORS_KEY); if (errors == null) { errors = new Errors(); request.setAttribute(ControllerConstants.ERRORS_KEY, errors); } IndexController indexController = new IndexController(servletContext, request, response, basePath, errors); processController(request, response, indexController); } finally { ApplicationMessage.clearBundle(); TimeZoneLocator.set(previousTimeZone); LocaleLocator.set(previousLocale); ResponseLocator.set(previousResponse); RequestLocator.set(previousRequest); } } }