redirect to repository root help url on IllegalStateException

This commit is contained in:
Sebastian Sdorra
2012-05-29 11:04:41 +02:00
parent 99458474f6
commit 6a51484b60
2 changed files with 91 additions and 2 deletions

View File

@@ -35,6 +35,7 @@ package sonia.scm.web.filter;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Splitter;
import com.google.inject.Provider;
import org.slf4j.Logger;
@@ -49,12 +50,15 @@ import sonia.scm.security.ScmSecurityException;
import sonia.scm.user.User;
import sonia.scm.util.AssertUtil;
import sonia.scm.util.HttpUtil;
import sonia.scm.util.Util;
import sonia.scm.web.security.WebSecurityContext;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException;
import java.util.Iterator;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -172,6 +176,17 @@ public abstract class PermissionFilter extends HttpFilter
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
catch (IllegalStateException ex)
{
if (logger.isWarnEnabled())
{
logger.warn(
"wrong request at ".concat(request.getRequestURI()).concat(
" send redirect"), ex);
}
response.sendRedirect(getRepositoryRootHelpUrl(request));
}
catch (ScmSecurityException ex)
{
if (logger.isWarnEnabled())
@@ -193,6 +208,29 @@ public abstract class PermissionFilter extends HttpFilter
}
}
/**
* Method description
*
*
* @param request
*
* @return
*/
private String extractType(HttpServletRequest request)
{
Iterator<String> it = Splitter.on(
HttpUtil.SEPARATOR_PATH).omitEmptyStrings().split(
request.getRequestURI()).iterator();
String type = it.next();
if (Util.isNotEmpty(request.getContextPath()))
{
type = it.next();
}
return type;
}
/**
* Method description
*
@@ -217,6 +255,25 @@ public abstract class PermissionFilter extends HttpFilter
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @param request
*
* @return
*/
private String getRepositoryRootHelpUrl(HttpServletRequest request)
{
String type = extractType(request);
String helpUrl = HttpUtil.getCompleteUrl(request,
"/api/rest/help/repository-root/");
helpUrl = helpUrl.concat(type).concat(".html");
return helpUrl;
}
/**
* Method description
*

View File

@@ -35,8 +35,14 @@ package sonia.scm.web.filter;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Throwables;
import com.google.inject.Provider;
import com.google.inject.ProvisionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.web.security.WebSecurityContext;
@@ -44,7 +50,6 @@ import sonia.scm.web.security.WebSecurityContext;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.http.HttpServletRequest;
import sonia.scm.config.ScmConfiguration;
/**
*
@@ -54,10 +59,20 @@ import sonia.scm.config.ScmConfiguration;
public abstract class ProviderPermissionFilter extends PermissionFilter
{
/**
* the logger for ProviderPermissionFilter
*/
private static final Logger logger =
LoggerFactory.getLogger(ProviderPermissionFilter.class);
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
*
* @param configuration
* @param securityContextProvider
* @param repositoryProvider
*/
@@ -83,7 +98,24 @@ public abstract class ProviderPermissionFilter extends PermissionFilter
@Override
protected Repository getRepository(HttpServletRequest request)
{
return repositoryProvider.get();
Repository repository = null;
try
{
repository = repositoryProvider.get();
}
catch (ProvisionException ex)
{
Throwables.propagateIfInstanceOf(ex.getCause(),
IllegalStateException.class);
if (logger.isErrorEnabled())
{
logger.error("could not get repository from request", ex);
}
}
return repository;
}
//~--- fields ---------------------------------------------------------------