Package de.innovationgate.wga.config

Examples of de.innovationgate.wga.config.VirtualHost


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {   
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
       
        VirtualHost vHost = findMatchingHost(_core.getWgaConfiguration(), request);
        if (vHost != null) {
            // handle vhost

            // determine default database key
            String defaultDBKey = getDefaultDBKey(_core, vHost);
           
            String uri = httpRequest.getRequestURI();
            String[] pathElements = uri.split("/");
            if (pathElements == null || pathElements.length < 1) {
                // root url request - redirect to default database or hide db
                if (defaultDBKey != null) {
                    if (vHost.isHideDefaultDatabaseInURL()) {
                        httpRequest = new DefaultDBRequestWrapper(_core, httpRequest, defaultDBKey);
                    } else {
                        httpResponse.sendRedirect(uri + defaultDBKey);
                        return;
                    }
                }
            } else if (pathElements.length == 2 && isRootResource(vHost, pathElements[1])) {
                // handle root resource request
                VirtualResource resource = findVirtualResource(vHost, pathElements[1]);
                httpRequest.getRequestDispatcher(resource.getPath()).forward(request, response);
                return;
            } else {
                // normal db request
                String requestedDBKey = pathElements[1];
                if (vHost.isHideDefaultDatabaseInURL() && defaultDBKey != null) {
                    if (requestedDBKey.equalsIgnoreCase(defaultDBKey)) {
                        // if default db requested redirect to url without dbkey
                        URLBuilder builder = new URLBuilder(httpRequest, _core.getCharacterEncoding());
                        String path = builder.getPath().substring(httpRequest.getContextPath().length());                                      
                        builder.setPath(httpRequest.getContextPath() + path.substring(defaultDBKey.length() + 1));
                        httpResponse.sendRedirect(builder.rebuild().toString());
                        return;
                    }
                   
                    // we have to check if requestedDBKey is a valid content database - if not we use defaultDatabase
                    if (!_core.getContentdbs().containsKey(requestedDBKey.toLowerCase())) {
                        requestedDBKey = defaultDBKey;
                        httpRequest = new DefaultDBRequestWrapper(_core, httpRequest, defaultDBKey);
                    }

                }
                if (!isDBKeyAllowed(_core.getWgaConfiguration(), vHost, requestedDBKey)) {                      
                    httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "Resource '" + requestedDBKey + "' is unknown for the requested host.");
                    _core.getLog().warn("Request from '" + request.getRemoteAddr() + "' to resource '" + uri + "' is not allowed by virtual host definition '" + vHost.getServername() + "'.");
                    return;
                }
            }
        }
       
View Full Code Here


     * @param dbkey
     * @return
     */   
    public static VirtualHost findPreferredHostForDatabase(WGAConfiguration config, String dbkey) {
       int priority = -1;
       VirtualHost preferredHost = null;
       for (VirtualHost vHost : config.getVirtualHosts()) {
           if (vHost.isEnabled() && !vHost.getServername().contains("*")) {
               int currentPrio = retrievePriorityForDatabase(config, vHost, dbkey);
               if (currentPrio != -1) {
                   if (priority == -1 || (priority > currentPrio)) {
View Full Code Here

        // Cannot rewrite if no request available
        if (request == null) {
            return url;
        }
       
        VirtualHost vHost = WGAVirtualHostingFilter.findMatchingHost(core.getWgaConfiguration(), request);
        if (vHost == null) {
            return url;
        } else {
            URLBuilder builder = parseURL(core, request, url);
            if (builder != null) {
                String path = builder.getPath().substring(request.getContextPath().length());
                if (path.startsWith("/")) {
                    path = path.substring(1);
                }
                if (path.indexOf("/") != -1) {
                    String targetDBKey = path.substring(0, path.indexOf("/"));
                   
                    // skip vhosts processing for plugins
                    if (targetDBKey.startsWith("plugin-")) {
                        return url;
                    }
                   
                    // first check if default database is requested and if we have to hide it from url
                    if (vHost.isHideDefaultDatabaseInURL() && vHost.getDefaultDatabase() != null) {
                        String defaultDBKey = WGAVirtualHostingFilter.getDefaultDBKey(core, vHost);
                        if (defaultDBKey != null && targetDBKey.equalsIgnoreCase(defaultDBKey)) {
                            // default db requested - remove from path
                            builder.setPath(path.substring(defaultDBKey.length()));
                            try {
                                return builder.rebuild(false).toString();
                            }
                            catch (UnsupportedEncodingException e) {
                                core.getLog().error("Unable to rewrite url '" + url + "'.");
                            }
                        }
                    }
                   
                    if (!WGAVirtualHostingFilter.isDBKeyAllowed(core.getWgaConfiguration(), vHost, targetDBKey)) {                     
                        // we have to find the best matching host for this db and create an absolute url here                       
                        VirtualHost preferredHost = WGAVirtualHostingFilter.findPreferredHostForDatabase(core.getWgaConfiguration(), targetDBKey);
                        if (preferredHost != null) {
                            builder.setHost(preferredHost.getServername());
                            if (preferredHost.isHideDefaultDatabaseInURL() && preferredHost.getDefaultDatabase() != null) {
                                String defaultDBKey = WGAVirtualHostingFilter.getDefaultDBKey(core, preferredHost);
                                if (defaultDBKey != null && targetDBKey.equalsIgnoreCase(defaultDBKey)) {
                                 // default db requested - remove from path
                                    builder.setPath(path.substring(defaultDBKey.length()));
                                }
View Full Code Here

TOP

Related Classes of de.innovationgate.wga.config.VirtualHost

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.