/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.web;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.DispatcherServlet;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.server.service.servlet.OriginalUrlResolver;
/**
* This class implements a modification of the dispatcher servlet.
*/
public final class CmsDispatcherServlet
extends DispatcherServlet
{
private final static List<HttpMethod> ALLOWED_HTTP_METHODS =
Arrays.asList( HttpMethod.GET, HttpMethod.POST, HttpMethod.HEAD, HttpMethod.OPTIONS );
public CmsDispatcherServlet()
{
setContextConfigLocation( "" );
}
@Override
protected void doOptions( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setHeader( "Allow", StringUtils.join( ALLOWED_HTTP_METHODS, "," ) );
response.setStatus( HttpServletResponse.SC_OK );
}
protected void doService( HttpServletRequest req, HttpServletResponse res )
throws Exception
{
final HttpMethod requestMethod = HttpMethod.valueOf( req.getMethod() );
if ( !ALLOWED_HTTP_METHODS.contains( requestMethod ) )
{
res.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED );
return;
}
ServletRequestAccessor.setRequest( req );
OriginalUrlResolver.resolveOriginalUrl( req );
super.doService( req, res );
}
}