Могу ли я манипулировать ответом котов на request.getServerName () или request.getLocalAddr () с помощью конфигурации в server.xml - PullRequest
0 голосов
/ 17 июня 2009

и если да: как?

Мне это нужно, потому что сервер известен под разными IP-адресами в разных подсетях.

Ответы [ 2 ]

2 голосов
/ 17 июня 2009

Насколько я знаю, невозможно изменить значение, возвращаемое ServletRequest.getServerName () или ServletRequest.getLocalAddr () просто с простым изменением конфигурации в сети .xml.

Но вы могли бы написать обертку ServletRequest / HttpServletRequest, которая просто делегирует все вызовы методов исходному запросу, кроме тех, которые вы хотите вернуть нестандартные значения. Чтобы обернуть все запросы, поступающие в ваше приложение, вы можете внедрить Filter , который просто оборачивает входящий запрос, а затем передает оболочку по цепочке фильтров. Фильтр будет настроен в вашем файле web.xml. Все после этого фильтра будет просто прозрачно использовать вашу оболочку и получит пользовательские значения, которые вы указали.

Оболочка может выглядеть так:

public class WrappedRequest implements ServletRequest {

    private final ServletRequest original;

    private String customServerName;

    public WrappedRequest(ServletRequest original) {
        this.original = original;
    }

    // ... delegate all method calls to original

    public String getServerName() {
        if (this.customServerName != null) {
            return this.customServerName;
        }
        return this.original.getServerName();
    }

    public void setServerName(String customServerName) {
        this.customServerName = customServerName;
    }
}

Фильтр:

public class RequestWrapperFilter implements Filter {

    private final String serverName;

    public void init(FilterConfig filterConfig) {
        this.serverName = filterConfig.getInitParameter("serverName");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        WrappedRequest wrapped = new WrappedRequest(request);
        wrapper.setServerName(this.serverName);

        chain.doFilter(wrapped, response);
    }

    public void destroy() { }
}
0 голосов
/ 17 июня 2009

Вы можете попробовать настроить виртуальные хосты для каждого поддомена, который вы обслуживаете, с этим экземпляром Tomcat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...