仅为特定IP地址授予对JSP文件/文件夹的访问权限

KuK*_*uKu 7 ip jsp tomcat servlets

我使用JSP和servlet创建了一个CMS应用程序.我没有使用任何类型的框架.CMS有两部分:

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

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

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

我找到了这些链接:

链接1看起来有点混乱,链接2看起来不错,但我没有使用JBoss.

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

kap*_*and 6

据我所知,您使用的是Apache Tomcat作为Web服务器.在这种情况下,使用远程地址过滤器来限制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>
Run Code Online (Sandbox Code Playgroud)

您可以使用硬编码的特定IP地址或正则表达式模式.但在某些情况下,正则表达式为您提供了很大的地址验证灵活性.

如果您使用65版本的Tomcat,则需要使用RemoteAddrValve类并在Tomcat的配置文件中定义以下行server.xml:

<Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”10\.10\.1[12]\..*”/> 
Run Code Online (Sandbox Code Playgroud)

要么

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    deny="86.57.158.37, 213.117.195.*, 124.86.42.*" /> 
Run Code Online (Sandbox Code Playgroud)

有关使用请求过滤阀的更多信息.

关于使用Tomcat保护管理Web应用程序的有趣文章.

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

但不要忘记,在某些情况下,可以使用代理服务器来绕过IP块.同时应用登录验证以提高安全性.


edz*_*dze 5

你可以定义一个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() {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,allowIP将重定向来自其他IP地址的所有请求.