【问题标题】:Give access to JSP file/folder only for particular IP address仅为特定 IP 地址授予对 JSP 文件/文件夹的访问权限
【发布时间】:2012-08-15 03:24:17
【问题描述】:

我使用 JSP 和 servlet 制作了一个 CMS 应用程序。我没有使用任何类型的框架。 CMS 有 2 个部分:

  1. 前端
  2. 管理员(后端)

例如,如果我在 www.example.com 上托管它,那么我的所有前端站点都会显示给所有用户。

www.example.com/admin 必须可以从几个 IP 地址访问。并非来自所有用户。

我找到了这些链接:

Link 1 看起来有点混乱,Link 2 看起来不错,但我没有使用 JBoss。

在 Stack Overflow 链接中,他们没有提到如何使用它。

【问题讨论】:

  • 如果您发布有关您正在使用的 Web 应用程序服务器的信息会更好。说“我没有使用 JBoss”不足以帮助您。
  • 是的..我正在使用apache 6.0...
  • 在这种情况下,请申请Remote Adress Request Filter Valve 来解决您的问题。添加server.xml 如下:<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.5.11"/> 其中192.168.5.11 是您的IP 地址的值。或者一个正则表达式,例如192\.168\.1\.\d+.
  • @Andrey Kapelchik 是的.. 和我预期的一样.. 也得到了答案

标签: jsp tomcat servlets ip


【解决方案1】:

据我了解,您使用Apache Tomcat 作为网络服务器。在这种情况下,使用Remote Address Filter 来限制IP 地址的访问。它允许将请求客户端的 IP 与正则表达式进行比较,以根据比较结果允许或阻止请求。

如果您使用Tomcat 7,则需要使用RemoteAddrFilter 类并在应用程序的配置文件web.xml 中为必要的IP 定义正则表达式:

<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 地址或正则表达式模式。但在某些情况下,正则表达式在地址验证方面为您提供了很大的灵活性。

如果您使用65 版本的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.*" /> 

更多关于using request filter valves的信息。

还有关于securing the administrative web apps with Tomcat的有趣文章。

顺便说一句,不拒绝来自localhost 的测试请求很方便。因此,将127\.0\.0\.1 添加到您允许的 IP 地址范围是有意义的。

但不要忘记,在某些情况下,可以使用代理服务器来绕过 IP 块。同时应用登录身份验证以获得更好的安全性。

【讨论】:

  • 现在我正在使用 tomcat 6,当我尝试 &lt;Valve className="org.apache.catalina.valves.RemoteAddrValve" dany="123.201.198.241"/&gt; 时,它不起作用。其次,如何仅授予/admin..的访问权限?
  • 尝试更改 - dany="123.201.198.241" 到 deny="123.201.198.241"
  • 在你上面给出的例子中 - 引用的范围是否等于 10.10.1.0 到 12 还是 10.10.1 到 12 以及最后一个八位字节之后的任何数字?
【解决方案2】:

您可以定义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 将被重定向。

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2018-06-17
    • 2014-02-18
    • 2012-07-23
    • 1970-01-01
    • 2014-10-14
    • 2019-06-18
    • 2022-06-16
    相关资源
    最近更新 更多