Мое приложение находится за кеширующим сервером, который действует как прокси. Я хочу ограничить доступ к приложению, чтобы к нему можно было получить доступ только через прокси. Сначала я попытался использовать 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-адрес прокси?