Spring Security Получение IP-адреса клиента без использования заголовков - PullRequest
1 голос
/ 09 июля 2020

Мое приложение находится за кеширующим сервером, который действует как прокси. Я хочу ограничить доступ к приложению, чтобы к нему можно было получить доступ только через прокси. Сначала я попытался использовать RemoteAddrFilter, однако этот фильтр основан на заголовке X-Forwarded-For, который является IP-адресом пользователя, подключающегося к прокси-серверу, а не IP-адресом прокси-сервера (этот заголовок пересылается, а не перезаписывается прокси). Я решил написать свой собственный фильтр, основанный на RemoteAddrFilter:

public class IpFilter extends RequestFilter {

@Override
protected Log getLogger() {
    return null;
}

private void sendErrorWhenNotHttp(ServletResponse response) throws IOException {
    response.setContentType("text/plain");
    response.getWriter().write(sm.getString("http.403"));
    response.getWriter().flush();
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    if (/*check IP*/) {
        filterChain.doFilter(servletRequest, servletResponse);
    } else if (servletResponse instanceof HttpServletResponse) {
        ((HttpServletResponse) servletResponse).sendError(denyStatus);
    } else {
        sendErrorWhenNotHttp(servletResponse);
    }
}
}

Это дает мне гораздо больше контроля над тем, к чему можно получить доступ, однако я не уверен, что поместить в это if заявление.

Из того, что я могу сказать, с учетом представленных здесь параметров, единственные доступные IP-адреса - через заголовки, которые не представляют IP-адрес прокси.

Как я могу получить IP-адрес прокси?

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