Получение фактического адреса в URL вместо URL прокси-адреса - PullRequest
0 голосов
/ 14 января 2019

Я сделал обратный прокси для веб-приложения как example.test.com, а фактический адрес - *.*.*.56, и он работает нормально, когда я нажимаю example.test.com, но когда я добавил аутентификацию Office 365, я отлаживаю через свою Java, используя httpRequest.getRequestURL(); Команда Я хочу адрес прокси, но фактический адрес я получаю как ***.***.0.56

Я пытался изменить URL с помощью Java, но безуспешно

String currentUri = httpRequest.getRequestURL().toString();

Мне нужно настроить любое решение на прокси-сервере, чтобы получить адрес прокси в моем текущем URL.

и я получаю сообщение об ошибке в Azure AAD, но в обратном прокси-сервере оно есть как example.test.com

{"error_description": "AADSTS70002: Ошибка при проверке учетных данных. AADSTS50011: Адрес ответа 'https://*...56:8080/abc/' не соответствует адресу ответа' https://example.test.com/', указанному при запросе кода авторизации. \ R \ nTrace ID: gddsgc97-5667- 6574g-9897h-97536vg688 \ r \ nКорреляционный идентификатор: 565gtdf-j7573-087f-9745a-792835t647 \ r \ nTimestamp: 2019-01-14 10: 09: 54Z "," ошибка ":" invalid_client "}

1 Ответ

0 голосов
/ 14 января 2019

Вы можете получить оригинальное имя хоста в заголовке запроса X-Forwarded-Host.

ОБНОВЛЕНИЕ: с фильтром

@WebFilter(filterName = "RequestURLFilter", urlPatterns = {"/*"})
public class RequestURLFilter implements Filter {
    private FilterConfig filterConfig = null;

    public RequestURLFilter() {
    }    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        ServletRequest wrappedRequest
                = new HttpServletRequestWrapper((HttpServletRequest) request) {
            @Override
            public String getServerName() {
                String forwarded = getHeader("X-Forwarded-Host");
                if (forwarded != null) {
                    return forwarded;
                } else {
                    return super.getServerName();
                }
            }

            @Override
            public String getRequestURI() {
                String info = getPathInfo();
                if (info == null) {
                    info = "";
                }
                return getScheme() + "://" + getServerName() + getContextPath()
                        + getServletPath() + info;
            }

            @Override
            public StringBuffer getRequestURL() {
                return new StringBuffer(getRequestURI());
            }
        };
        chain.doFilter(wrappedRequest, response);
    }

    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    @Override
    public void init(FilterConfig filterConfig) {        
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
    }
}
...