/******************************************************************************* * Signavio Core Components * Copyright (C) 2012 Signavio GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ /** * */ package com.signavio.platform.filters; import java.io.IOException; import java.util.HashSet; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.signavio.platform.core.HandlerEntry; import com.signavio.platform.core.Platform; import com.signavio.platform.exceptions.RequestException; import com.signavio.platform.security.business.FsAccessToken; import com.signavio.platform.servlets.DispatcherServlet; import com.signavio.platform.tenant.LicenseException; /** * This filter checks, if the requested handler exists. * If not, an exception is thrown. If the handler exists, * the HandlerEntry is added as an attribute to the request * (attribute "handler"). * * @author Nicolas Peters * */ public class HandlerFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if(request instanceof HttpServletRequest) { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //check if this request is a post to the login handler String[] path = DispatcherServlet.parseURL( req.getRequestURI() ); String context = path[0]; //String identifier = path[1]; String extension = path[2]; HandlerEntry handler = null; // If there is no extension if( extension == null ){ // Find the BasisHandler handler = Platform.getInstance().getHandlerDirectory().getBasisHandler( context ); } else if( context != null ) { // If not, findExtension Handler handler =Platform.getInstance().getHandlerDirectory().getHandlerByContextAndUri(context, extension); } if(handler == null) { throw new RequestException("handlerfilter.handlerNotFound", context); } else { req.setAttribute("handler", handler); } chain.doFilter(req, res); } } //@Override public void destroy() { } //@Override public void init(FilterConfig arg0) throws ServletException { } }