Предоставить доступ к файлу / папке JSP только для определенного IP-адреса

Я сделал приложение CMS, используя JSP и сервлет. Я не использую какие-либо рамки. CMS состоит из 2 частей:

  1. Внешний интерфейс
  2. Admin (Back end)

Если бы я принимал это на www.example.comНапример, тогда весь мой конечный сайт будет показан для всех пользователей.

Но www.example.com/admin должен быть доступен с пары IP-адресов. Не от всех пользователей.

Я нашел эти ссылки:

Ссылка 1 выглядит немного запутанно, а Ссылка 2 выглядит хорошо, но я не использую JBoss.

В ссылке на переполнение стека они не упомянули, как ее использовать.

2 ответа

Решение

Насколько я понимаю из вашего вопроса вы используете Apache Tomcat в качестве веб-сервера. В этом случае используйте фильтр удаленных адресов, чтобы ограничить доступ по IP-адресу. Это позволяет сравнивать IP запрашивающего клиента с регулярными выражениями, чтобы разрешить или запретить запрос на основе результатов сравнения.

Если вы используете Tomcat 7, вам нужно использовать класс RemoteAddrFilter и определить регулярные выражения для необходимого IP в файле конфигурации приложения. web.xml:

<filter>
   <filter-name>Remote Address Filter</filter-name>
   <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
   <init-param>
      <param-name>allow</param-name> <!-- or deny -->
      <param-value>10\.10\.1[12]\..*</param-value> <!-- regexp for your ip adress -->
   </init-param>
</filter>
<filter-mapping>
   <filter-name>Remote Address Filter</filter-name>
   <url-pattern>*/admin</url-pattern> <!-- the url of your admin page -->
</filter-mapping>

Вы можете использовать определенные IP-адреса или шаблоны регулярных выражений. Но в некоторых случаях регулярные выражения дают вам большую гибкость в проверке адресов.

И если вы используете 6 или 5 версию Tomcat, вам нужно использовать класс RemoteAddrValve и определить следующую строку в файле конфигурации Tomcat server.xml:

<Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”10\.10\.1[12]\..*”/> 

или же

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    deny="86.57.158.37, 213.117.195.*, 124.86.42.*" /> 

Больше информации об использовании фильтрационных клапанов.

И интересная статья о защите административных веб-приложений с помощью Tomcat.

И, кстати, удобно не отклонять запросы от localhost для тестирования. Так что имеет смысл добавить 127\.0\.0\.1 на ваш допустимый диапазон IP-адресов.

Но не забывайте, что в некоторых случаях прокси-сервер можно использовать для обхода блока IP. Примените также аутентификацию входа в систему для большей безопасности.

Вы можете определить WebFilter,

Пример:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName = "ezSecurityAdminFilter", urlPatterns = "/admin/*")
public class EZSecurityAdminFilter implements Filter {

    private static String allowIP = "0:0:0:0:0:0:0:1";

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;


        String ipAddr = req.getRemoteAddr();

        System.out.println("IP-Addr: " + ipAddr);

        if (ipAddr.equals(allowIP)) {
            chain.doFilter(request, response);
        } else {

            res.sendRedirect("/WebApplication1/access_denied.jsp");
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

Все запросы с другого IP-адреса тогда allowIP будет перенаправлен.

Другие вопросы по тегам