@Override
    protected void configureServlets() {

        // Bind resource services
        bind(LanguageResourceService.class).toInstance(languageResourceService);
        bind(PatchResourceService.class).toInstance(patchResourceService);

        // Load initial language resources from servlet context
        languageResourceService.addLanguageResources(getServletContext());

        // Init JavaScript and CSS resources from extensions
        Collection<Resource> javaScriptResources = new ArrayList<Resource>();
        Collection<Resource> cssResources = new ArrayList<Resource>();

        // Veriffy that the possibly-cached index.html matches the current build
        javaScriptResources.add(new WebApplicationResource(getServletContext(), "/verifyCachedVersion.js"));

        // Load all extensions
        final Set<String> toleratedAuthProviders = getToleratedAuthenticationProviders();
        loadExtensions(javaScriptResources, cssResources, toleratedAuthProviders);

        // Always bind default file-driven auth and event logging last
        bindAuthenticationProvider(FileAuthenticationProvider.class, toleratedAuthProviders);
        bindListener(EventLoggingListener.class);

        // Dynamically generate app.js and app.css from extensions
        serve("/app.js").with(new ResourceServlet(new SequenceResource(javaScriptResources)));
        serve("/app.css").with(new ResourceServlet(new SequenceResource(cssResources)));

        // Dynamically serve all language resources
        for (Map.Entry<String, Resource> entry : languageResourceService.getLanguageResources().entrySet()) {

            // Get language key/resource pair
            String languageKey = entry.getKey();
            Resource resource = entry.getValue();

            // Serve resource within /translations
            serve("/translations/" + languageKey + ".json").with(new ResourceServlet(resource));
            
        }
        
    }
Loads all extensions within the GUACAMOLE_HOME/extensions directory, if
any, adding their static resource to the given resource collections.

@param javaScriptResources
    A modifiable collection of static JavaScript resources which may
    receive new JavaScript resources from extensions.

@param cssResources
    A modifiable collection of static CSS resources which may receive
    new CSS resources from extensions.

@param toleratedAuthProviders
    The set of identifiers of all authentication providers whose
    internal failures should be tolerated during the authentication
    process. If the identifier of an authentication provider is within
    this set, errors during authentication will result in the
    authentication provider being ignored for that authentication
    attempt, with the authentication process proceeding as if that
    authentication provider were not present. By default, errors during
    authentication halt the authentication process entirely.
guacamole/src/main/java/org/apache/guacamole/extension/ExtensionModule.java