Java 手动配置某一范围内IP访问

 

  1. 说明
    1. 很多的Web系统都经常有这样的需求以保证系统安全,限制IP登录,例如在某个局域网中只允许一定范围内IP登录系统,或者不允许外网访问。
      1. 如只允许192.168.24.10---192.168.24.255范围内IP地址访问
  1. IP地址分类
    1. 在说到关于IP地址的问题时,首先,要了解IP分类,IP一般分为ABCDE五类,我们常说的192.168.*.*,是属于C类,该类主要适用于小型网络,比如我们学校的局域网。
      1. IP地址范围从192.168.0.0到192.168.255.255,不包括这两个地址,他们属于保留地址。
  1. 限制示例
    1. 这个实例写在了StrutsAction方法里面,当然也可以拿出来,写在Filter里,这样可以通过简单配置就可以实现禁止客户端访问。
    1. LoginAction
      1. package com.bjpowernode.drp.web.actions;
        
        import java.util.Arrays;
        
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        
        import org.apache.struts.action.Action;
        import org.apache.struts.action.ActionForm;
        import org.apache.struts.action.ActionForward;
        import org.apache.struts.action.ActionMapping;
        
        import com.bjpowernode.drp.web.forms.LoginActionForm;
        
        /**
         * 登录Action
         * 负责取得表单数据、调用业务逻辑、返回转向信息
         * 
         * @author Administrator
         *
         */
        public class LoginAction extends Action {
        
        	@Override
        	public ActionForward execute(ActionMapping mapping, ActionForm form,
        			HttpServletRequest request, HttpServletResponse response)
        			throws Exception {
        		//取得表单数据
        		LoginActionForm laf=(LoginActionForm)form;
        		//取得用户名,密码
        		String username=laf.getUsername();
        		String password=laf.getPassword();
        		//转向对象
        		ActionForward actionForward=null;
        		//判断用户名,密码是否正确
        		if ("admin".equals(username) && "admin".equals(password)) {
        			//得到远程客户端IP地址 
        			String remoteAddr=request.getRemoteAddr();
        			//将客户端IP地址以“.”分割为数组remoteAddrs[1]);
        			String[]  remoteAddrs=remoteAddr.split("\\."); 
        
        			//从配置文件中取得IP范围 ,四个数组分别保存的IP地址四部分的上界和下界 
        			String[] ipOne=request.getSession().getServletContext().getInitParameter("ip-one").split(",");
        			String[] ipTwo=request.getSession().getServletContext().getInitParameter("ip-two").split(",");
        			String[] ipThree=request.getSession().getServletContext().getInitParameter("ip-three").split(",");
        			String[] ipFour=request.getSession().getServletContext().getInitParameter("ip-four").split(",");
        			//取得第四部分的上下界 
        			int m=Integer.parseInt(ipFour[0]);
        			int n=Integer.parseInt(ipFour[1]);
        			//判断客户端IP地址是否在设置范围内
        			if (ipOne[0].equals(remoteAddrs[0]) && ipTwo[0].equals(remoteAddrs[1]) && ipThree[0].equals(remoteAddrs[2])) {
        				for(int i=m;i<=n;i++) {
        					if (Integer.parseInt(remoteAddrs[3])==i) {
        						//登录成功  
        						request.getSession().setAttribute("user", username);
        						actionForward= mapping.findForward("success");
        					} 
        				} 
        				actionForward= mapping.findForward("ipError");
        			} 
        		}else { 
        			//登录失败
        			actionForward= mapping.findForward("index");
        		}
        		return actionForward;
        	}  
         
        }
        

    1. Web.xml配置
      1. <?xml version="1.0" encoding="UTF-8"?>
        <web-app version="2.4" 
        	xmlns="http://java.sun.com/xml/ns/j2ee" 
        	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
           <!-- 例如我的ip地址为192.168.24.165,并不在设置范围内;下标范围是192.168.24.1-164 -->
           <context-param>
          	<param-name>ip-one</param-name>
          	<param-value>192</param-value>
          </context-param>
          <context-param>
          	<param-name>ip-two</param-name>
          	<param-value>168</param-value>
          </context-param>
          <context-param>
          	<param-name>ip-three</param-name>
          	<param-value>24</param-value>
          </context-param>
          <context-param>
          	<param-name>ip-four</param-name>
          	<param-value>1,164</param-value>
          </context-param> 
          
        </web-app>

    1. 效果

 

  1. IP过滤器
    1. 这种限制类似于限制编码问题,写到Filter里面最合适不过,这里就不往里面写了,以后用到时在写成Filter,编程可配置功能。
    2. Filter的用处十分广泛。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李龙生的博客

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值