Search in sources :

Example 6 with FilterMap

use of org.apache.tomcat.util.descriptor.web.FilterMap in project tomcat by apache.

the class ContextConfig method processAnnotationWebFilter.

/**
     * process filter annotation and merge with existing one!
     * FIXME: refactoring method too long and has redundant subroutines with
     *        processAnnotationWebServlet!
     * @param className The filter class name
     * @param ae The filter annotation
     * @param fragment The corresponding fragment
     */
protected void processAnnotationWebFilter(String className, AnnotationEntry ae, WebXml fragment) {
    String filterName = null;
    // must search for name s. Spec Servlet API 3.0 - 8.2.3.3.n.ii page 81
    List<ElementValuePair> evps = ae.getElementValuePairs();
    for (ElementValuePair evp : evps) {
        String name = evp.getNameString();
        if ("filterName".equals(name)) {
            filterName = evp.getValue().stringifyValue();
            break;
        }
    }
    if (filterName == null) {
        // classname is default filterName as annotation has no name!
        filterName = className;
    }
    FilterDef filterDef = fragment.getFilters().get(filterName);
    FilterMap filterMap = new FilterMap();
    boolean isWebXMLfilterDef;
    if (filterDef == null) {
        filterDef = new FilterDef();
        filterDef.setFilterName(filterName);
        filterDef.setFilterClass(className);
        isWebXMLfilterDef = false;
    } else {
        isWebXMLfilterDef = true;
    }
    boolean urlPatternsSet = false;
    boolean servletNamesSet = false;
    boolean dispatchTypesSet = false;
    String[] urlPatterns = null;
    for (ElementValuePair evp : evps) {
        String name = evp.getNameString();
        if ("value".equals(name) || "urlPatterns".equals(name)) {
            if (urlPatternsSet) {
                throw new IllegalArgumentException(sm.getString("contextConfig.urlPatternValue", "WebFilter", className));
            }
            urlPatterns = processAnnotationsStringArray(evp.getValue());
            urlPatternsSet = urlPatterns.length > 0;
            for (String urlPattern : urlPatterns) {
                // % decoded (if required) using UTF-8
                filterMap.addURLPattern(urlPattern);
            }
        } else if ("servletNames".equals(name)) {
            String[] servletNames = processAnnotationsStringArray(evp.getValue());
            servletNamesSet = servletNames.length > 0;
            for (String servletName : servletNames) {
                filterMap.addServletName(servletName);
            }
        } else if ("dispatcherTypes".equals(name)) {
            String[] dispatcherTypes = processAnnotationsStringArray(evp.getValue());
            dispatchTypesSet = dispatcherTypes.length > 0;
            for (String dispatcherType : dispatcherTypes) {
                filterMap.setDispatcher(dispatcherType);
            }
        } else if ("description".equals(name)) {
            if (filterDef.getDescription() == null) {
                filterDef.setDescription(evp.getValue().stringifyValue());
            }
        } else if ("displayName".equals(name)) {
            if (filterDef.getDisplayName() == null) {
                filterDef.setDisplayName(evp.getValue().stringifyValue());
            }
        } else if ("largeIcon".equals(name)) {
            if (filterDef.getLargeIcon() == null) {
                filterDef.setLargeIcon(evp.getValue().stringifyValue());
            }
        } else if ("smallIcon".equals(name)) {
            if (filterDef.getSmallIcon() == null) {
                filterDef.setSmallIcon(evp.getValue().stringifyValue());
            }
        } else if ("asyncSupported".equals(name)) {
            if (filterDef.getAsyncSupported() == null) {
                filterDef.setAsyncSupported(evp.getValue().stringifyValue());
            }
        } else if ("initParams".equals(name)) {
            Map<String, String> initParams = processAnnotationWebInitParams(evp.getValue());
            if (isWebXMLfilterDef) {
                Map<String, String> webXMLInitParams = filterDef.getParameterMap();
                for (Map.Entry<String, String> entry : initParams.entrySet()) {
                    if (webXMLInitParams.get(entry.getKey()) == null) {
                        filterDef.addInitParameter(entry.getKey(), entry.getValue());
                    }
                }
            } else {
                for (Map.Entry<String, String> entry : initParams.entrySet()) {
                    filterDef.addInitParameter(entry.getKey(), entry.getValue());
                }
            }
        }
    }
    if (!isWebXMLfilterDef) {
        fragment.addFilter(filterDef);
        if (urlPatternsSet || servletNamesSet) {
            filterMap.setFilterName(filterName);
            fragment.addFilterMapping(filterMap);
        }
    }
    if (urlPatternsSet || dispatchTypesSet) {
        Set<FilterMap> fmap = fragment.getFilterMappings();
        FilterMap descMap = null;
        for (FilterMap map : fmap) {
            if (filterName.equals(map.getFilterName())) {
                descMap = map;
                break;
            }
        }
        if (descMap != null) {
            String[] urlsPatterns = descMap.getURLPatterns();
            if (urlPatternsSet && (urlsPatterns == null || urlsPatterns.length == 0)) {
                for (String urlPattern : filterMap.getURLPatterns()) {
                    // % decoded (if required) using UTF-8
                    descMap.addURLPattern(urlPattern);
                }
            }
            String[] dispatcherNames = descMap.getDispatcherNames();
            if (dispatchTypesSet && (dispatcherNames == null || dispatcherNames.length == 0)) {
                for (String dis : filterMap.getDispatcherNames()) {
                    descMap.setDispatcher(dis);
                }
            }
        }
    }
}
Also used : FilterDef(org.apache.tomcat.util.descriptor.web.FilterDef) ElementValuePair(org.apache.tomcat.util.bcel.classfile.ElementValuePair) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 7 with FilterMap

use of org.apache.tomcat.util.descriptor.web.FilterMap in project tomcat by apache.

the class TestRemoteIpFilter method testRemoteIpFilter.

private MockFilterChain testRemoteIpFilter(FilterDef filterDef, Request request) throws LifecycleException, IOException, ServletException {
    Tomcat tomcat = getTomcatInstance();
    Context root = tomcat.addContext("", TEMP_DIR);
    RemoteIpFilter remoteIpFilter = new RemoteIpFilter();
    filterDef.setFilterClass(RemoteIpFilter.class.getName());
    filterDef.setFilter(remoteIpFilter);
    filterDef.setFilterName(RemoteIpFilter.class.getName());
    root.addFilterDef(filterDef);
    FilterMap filterMap = new FilterMap();
    filterMap.setFilterName(RemoteIpFilter.class.getName());
    filterMap.addURLPatternDecoded("*");
    root.addFilterMap(filterMap);
    getTomcatInstance().start();
    MockFilterChain filterChain = new MockFilterChain();
    // TEST
    TesterResponse response = new TesterResponse();
    response.setRequest(request);
    remoteIpFilter.doFilter(request, response, filterChain);
    return filterChain;
}
Also used : Context(org.apache.catalina.Context) TesterContext(org.apache.tomcat.unittest.TesterContext) Tomcat(org.apache.catalina.startup.Tomcat) TesterResponse(org.apache.tomcat.unittest.TesterResponse) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap)

Example 8 with FilterMap

use of org.apache.tomcat.util.descriptor.web.FilterMap in project tomcat by apache.

the class TestAddCharSetFilter method doTest.

private void doTest(String encoding, String expected, int mode) throws Exception {
    // Setup Tomcat instance
    Tomcat tomcat = getTomcatInstance();
    // No file system docBase required
    Context ctx = tomcat.addContext("", null);
    // Add the Servlet
    CharsetServlet servlet = new CharsetServlet(mode);
    Tomcat.addServlet(ctx, "servlet", servlet);
    ctx.addServletMappingDecoded("/", "servlet");
    // Add the Filter
    FilterDef filterDef = new FilterDef();
    filterDef.setFilterClass(AddDefaultCharsetFilter.class.getName());
    filterDef.setFilterName("filter");
    if (encoding != null) {
        filterDef.addInitParameter("encoding", encoding);
    }
    ctx.addFilterDef(filterDef);
    FilterMap filterMap = new FilterMap();
    filterMap.setFilterName("filter");
    filterMap.addServletName("servlet");
    ctx.addFilterMap(filterMap);
    tomcat.start();
    Map<String, List<String>> headers = new HashMap<>();
    getUrl("http://localhost:" + getPort() + "/", new ByteChunk(), headers);
    List<String> ctHeaders = headers.get("Content-Type");
    assertEquals(1, ctHeaders.size());
    String ct = ctHeaders.get(0);
    assertEquals("text/plain;charset=" + expected, ct);
}
Also used : Context(org.apache.catalina.Context) Tomcat(org.apache.catalina.startup.Tomcat) FilterDef(org.apache.tomcat.util.descriptor.web.FilterDef) HashMap(java.util.HashMap) ByteChunk(org.apache.tomcat.util.buf.ByteChunk) List(java.util.List) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap)

Example 9 with FilterMap

use of org.apache.tomcat.util.descriptor.web.FilterMap in project spring-framework by spring-projects.

the class TomcatWebSocketTestServer method deployConfig.

@Override
public void deployConfig(WebApplicationContext wac, Filter... filters) {
    Assert.state(this.port != -1, "setup() was never called.");
    this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir"));
    this.context.addApplicationListener(WsContextListener.class.getName());
    Tomcat.addServlet(this.context, "dispatcherServlet", new DispatcherServlet(wac)).setAsyncSupported(true);
    this.context.addServletMappingDecoded("/", "dispatcherServlet");
    for (Filter filter : filters) {
        FilterDef filterDef = new FilterDef();
        filterDef.setFilterName(filter.getClass().getName());
        filterDef.setFilter(filter);
        filterDef.setAsyncSupported("true");
        this.context.addFilterDef(filterDef);
        FilterMap filterMap = new FilterMap();
        filterMap.setFilterName(filter.getClass().getName());
        filterMap.addURLPattern("/*");
        filterMap.setDispatcher("REQUEST,FORWARD,INCLUDE,ASYNC");
        this.context.addFilterMap(filterMap);
    }
}
Also used : WsContextListener(org.apache.tomcat.websocket.server.WsContextListener) FilterDef(org.apache.tomcat.util.descriptor.web.FilterDef) Filter(javax.servlet.Filter) DispatcherServlet(org.springframework.web.servlet.DispatcherServlet) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap)

Example 10 with FilterMap

use of org.apache.tomcat.util.descriptor.web.FilterMap in project tomee by apache.

the class OpenEJBContextConfig method webConfig.

@Override
protected void webConfig() {
    TomcatHelper.configureJarScanner(context);
    // read the real config
    super.webConfig();
    if (IgnoredStandardContext.class.isInstance(context)) {
        // no need of jsf
        return;
    }
    if (AppFinder.findAppContextOrWeb(context.getLoader().getClassLoader(), AppFinder.WebBeansContextTransformer.INSTANCE) != null) {
        final FilterDef asyncOwbFilter = new FilterDef();
        asyncOwbFilter.setAsyncSupported("true");
        asyncOwbFilter.setDescription("OpenEJB CDI Filter - to propagate @RequestScoped in async tasks");
        asyncOwbFilter.setDisplayName("OpenEJB CDI");
        asyncOwbFilter.setFilterClass(EEFilter.class.getName());
        asyncOwbFilter.setFilterName(EEFilter.class.getName());
        context.addFilterDef(asyncOwbFilter);
        final FilterMap asyncOwbMapping = new FilterMap();
        asyncOwbMapping.setFilterName(asyncOwbFilter.getFilterName());
        asyncOwbMapping.addURLPattern("/*");
        context.addFilterMap(asyncOwbMapping);
    }
    if ("true".equalsIgnoreCase(SystemInstance.get().getProperty("tomee.jsp-development", "false"))) {
        for (final Container c : context.findChildren()) {
            if (Wrapper.class.isInstance(c)) {
                final Wrapper servlet = Wrapper.class.cast(c);
                if ("org.apache.jasper.servlet.JspServlet".equals(servlet.getServletClass())) {
                    servlet.addInitParameter("development", "true");
                }
            }
        }
    }
    final ClassLoader classLoader = context.getLoader().getClassLoader();
    // add myfaces auto-initializer if mojarra is not present
    try {
        classLoader.loadClass("com.sun.faces.context.SessionMap");
        return;
    } catch (final Throwable ignored) {
    // no-op
    }
    try {
        final Class<?> myfacesInitializer = Class.forName(MYFACES_TOMEEM_CONTAINER_INITIALIZER, true, classLoader);
        final ServletContainerInitializer instance = (ServletContainerInitializer) myfacesInitializer.newInstance();
        context.addServletContainerInitializer(instance, getJsfClasses(context));
        // cleanup listener
        context.addApplicationListener(TOMEE_MYFACES_CONTEXT_LISTENER);
    } catch (final Exception | NoClassDefFoundError ignored) {
    // no-op
    }
}
Also used : ServletContainerInitializer(javax.servlet.ServletContainerInitializer) Wrapper(org.apache.catalina.Wrapper) StandardWrapper(org.apache.catalina.core.StandardWrapper) Container(org.apache.catalina.Container) FilterDef(org.apache.tomcat.util.descriptor.web.FilterDef) EEFilter(org.apache.openejb.server.httpd.EEFilter) FilterMap(org.apache.tomcat.util.descriptor.web.FilterMap) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ClassFormatException(org.apache.tomcat.util.bcel.classfile.ClassFormatException)

Aggregations

FilterMap (org.apache.tomcat.util.descriptor.web.FilterMap)21 FilterDef (org.apache.tomcat.util.descriptor.web.FilterDef)14 Context (org.apache.catalina.Context)7 Tomcat (org.apache.catalina.startup.Tomcat)5 HashMap (java.util.HashMap)4 DispatcherType (javax.servlet.DispatcherType)4 HashSet (java.util.HashSet)3 Container (org.apache.catalina.Container)3 SecurityConstraint (org.apache.tomcat.util.descriptor.web.SecurityConstraint)3 IOException (java.io.IOException)2 HttpURLConnection (java.net.HttpURLConnection)2 URL (java.net.URL)2 List (java.util.List)2 Wrapper (org.apache.catalina.Wrapper)2 TomcatBaseTest (org.apache.catalina.startup.TomcatBaseTest)2 TesterContext (org.apache.tomcat.unittest.TesterContext)2 ErrorPage (org.apache.tomcat.util.descriptor.web.ErrorPage)2 Test (org.junit.Test)2 File (java.io.File)1 MalformedURLException (java.net.MalformedURLException)1