java web项目如何限制访问的ip访问地址

39 篇文章 0 订阅
8 篇文章 0 订阅

JavaWeb项目限制IP访问

这其实是一个类似IP地址的黑白名单问题,客户端IP地址在黑名单的就禁止访问,不在的就正常访问;

提出这样一个问题,大概就是感觉某些web应用在某些场合下要求一定的安全措施,这也算是安全审计的一种方法,可能是在应用运行过程中检测到某些IP被高访问服务器,或者经过某种手段(如大数据分析)得知,这些IP有可能再恶意攻击,so最简单的方法就是禁止这些IP访问,因此也就提出这样一个问题来了。

有两种方式解决这个问题,第一就是配置tomcat服务器,将非法地址拒绝掉,第二就是再程序中引入黑名单;
第一种方法,简单只需配置几步即可,不过灵活性很差,第二种就需要编码了,但是可操作的自由度大。

Tomcat配置IP访问限制与允许(server.xml)

server.xml配置文件,在

<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="" deny="10.50.200.38,10.50.100.49"/>

注: 拒绝10.50.200.38与10.50.100.49IP地址对Tomcat服务器的访问,其它允许.
其功用类似于 Apache httpd中基于目录的Allow/Deny指令。

属性:className 意义:Java类名;必须是org.apache.catalina.valves.RemoteHostValveorg.apache.catalina.valves.RemoteAddrValve

属性:allow 意义:以逗号分隔的IP地址。这些字符串返回为常规表达式样式,因此,如果录入IP地址,一定要确信把“.”用反斜线(“\”)进行转义,如127\.0\.0\.1

属性:deny 意义:以逗号分隔的IP地址。如allow属性那样,这些字符串由常规表达式组成

如果未指定allow模式,则会拒绝符合deny属性的模式,但允许其他模式。类似地,如果未指定deny模式,则会允许符合allow属性的模式,但会拒绝其他样式。

JavaWeb—过滤器的使用–禁止IP登陆

在实际的应用中,我们会遇到这样的情况,需要对某些Ip进行访问限制,不让非法的Ip访问应用系统。只有合法的Ip才能可以继续访问!

  1. 定义一个过滤器,专门用户过滤指定的ip地址禁止或者允许访问
package filter;

/**
 * 过滤IP的过滤器
 */
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FilterIP implements Filter {

	 protected String fip = "";// 要过滤的IP
	 protected FilterConfig fcon = null;// 过滤器配置对象

	 @Override
	 public void destroy() {
		System.out.println("FilterIP 过滤器销毁");
		this.fcon = null;
	 }

	 /**
	  * 执行过滤方法
	  * 
	  * @author admin
	  * @param request
	  *            请求对象
	  * @param response
	  *            响应对象
	  * @param chain
	  *            过滤器对象
	  */
	 @Override
	 public void doFilter(ServletRequest request, ServletResponse response,
	   FilterChain chain) throws IOException, ServletException {
		System.out.println("FilterIP 过滤器执行过滤方法");
		response.setContentType("text/html");
		response.setCharacterEncoding("gb2312");
		// 得到请求的IP地址 和要过滤的Ip地址进行对比
		String ip = request.getRemoteAddr();
		if (fip.equals(ip)) {
			// 对方就是要过滤的对象 不能访问
			String path = "error.jsp";
			RequestDispatcher desc = request.getRequestDispatcher(path);
			desc.forward(request, response);
		} else {
			// 不是 就将过滤器加到过滤链
			chain.doFilter(request, response);
		}
	 }

	@Override//初始化
	public void init(FilterConfig config) throws ServletException {
		System.out.println("FilterIP 过滤器初始化");
		this.fcon = config;
		fip = fcon.getInitParameter("FilteredIP");//[^1]
		if (fip == null) {
			fip = "";
		}
		System.out.println("要过滤的IP地址为:" + fip);
	}

}
  1. 定义成功访问jsp页面和失败页面

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<html>  
    <head>  
        <title>欢迎登陆</title>  
    </head>  
    <body>  
        <center>  
            <font size = 4>欢迎登陆javaWeb服务器</font><!-- 成功访问输出语句 -->  
        </center>  
    </body>  
</html>  

error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<html>  
    <head>  
        <title>错误报告</title>  
    </head>  
    <body>  
        <%  
            out.print("<center><font size = 4>对不起,您的IP不能登陆本网站!</font></center>");//被拒绝服务器Ip显示信息  
        %>  
    </body>  
</html> 
  1. 配置过滤器的web.xml
<!-- 配置过滤器 尽可能把过滤器配置到web.xml最上面 -->  
  <filter>  
    <filter-name>FilterIP</filter-name>  
    <filter-class>filter.FilterIP</filter-class>  
    <init-param>  
    <param-name>FilteredIP</param-name>   
    <param-value>127.0.0.1</param-value><!-- 要过滤的Ip  127.0.0.1为本地 -->  
    </init-param>  
  </filter>  
  <filter-mapping>  
    <filter-name>FilterIP</filter-name>  
    <url-pattern>/*</url-pattern>  
  </filter-mapping>  

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Java 中,可以通过使用 Servlet Filter 来实现限制指定 IP 访问接口的功能。以下是示例代码: 1. 创建一个 IPFilter 类: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class IPFilter implements Filter { private String allowedIP; @Override public void init(FilterConfig filterConfig) throws ServletException { allowedIP = filterConfig.getInitParameter("allowedIP"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String clientIP = req.getRemoteAddr(); if (clientIP.equals(allowedIP)) { chain.doFilter(request, response); } else { res.setStatus(HttpServletResponse.SC_FORBIDDEN); } } @Override public void destroy() { } } ``` 2. 在 web.xml 文件中配置 Filter: ```xml <filter> <filter-name>IPFilter</filter-name> <filter-class>IPFilter</filter-class> <init-param> <param-name>allowedIP</param-name> <param-value>127.0.0.1</param-value> </init-param> </filter> <filter-mapping> <filter-name>IPFilter</filter-name> <url-pattern>/api/*</url-pattern> </filter-mapping> ``` 在上述代码中,将 `allowedIP` 参数设置为允许访问接口IP 地址。并且将 Filter 映射到 `/api/*` URL 上,以便过滤需要限制接口。当客户端访问接口时,Filter 会检查客户端 IP 地址是否与 `allowedIP` 相同,并根据结果返回 HTTP 状态码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

junehappylove

急急如律令,buibui~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值