/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal; import java.io.IOException; import java.util.Arrays; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.enonic.cms.core.servlet.ServletRequestAccessor; import com.enonic.cms.server.service.servlet.OriginalUrlResolver; public final class PortalServlet extends HttpServlet { private final static List<String> ALLOWED_HTTP_METHODS = Arrays.asList( "GET", "POST", "HEAD", "OPTIONS" ); private RequestDispatcher dispatcher; @Override public void init( final ServletConfig config ) throws ServletException { super.init( config ); final ServletContext context = config.getServletContext(); final WebApplicationContext springContext = WebApplicationContextUtils.getRequiredWebApplicationContext( context ); this.dispatcher = springContext.getBean( RequestDispatcher.class ); } @Override protected void doOptions( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setHeader( "Allow", StringUtils.join( ALLOWED_HTTP_METHODS, "," ) ); response.setStatus( HttpServletResponse.SC_OK ); } @Override protected void service( final HttpServletRequest req, final HttpServletResponse res ) throws ServletException, IOException { final String requestMethod = req.getMethod(); if ( !ALLOWED_HTTP_METHODS.contains( requestMethod ) ) { res.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED ); return; } if ( requestMethod.equals( "OPTIONS" ) ) { doOptions( req, res ); return; } ServletRequestAccessor.setRequest( req ); OriginalUrlResolver.resolveOriginalUrl( req ); this.dispatcher.handle( req, res ); } }