我使用JSP和servlet创建了一个CMS应用程序。我没有使用任何类型的框架。 CMS有两部分:
例如,如果我在www.example.com
上托管它,那么我的所有前端网站都会显示给所有用户。
但必须可以从几个IP地址访问www.example.com/admin
。并非来自所有用户。
我找到了这些链接:
链接1看起来有点混乱,链接2看起来不错,但我没有使用JBoss。
在Stack Overflow链接中,他们没有提到如何使用它。
答案 0 :(得分:6)
据我所知,您使用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地址或正则表达式模式。但在某些情况下,正则表达式为您提供了很大的地址验证灵活性。
如果您使用Tomcat的6或5版本,则需要使用类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块。同时应用登录身份验证以提高安全性。
答案 1 :(得分: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() {
}
}
来自其他IP地址的所有请求,然后allowIP
将被重定向。