博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 手动配置某一范围内IP访问
阅读量:4977 次
发布时间:2019-06-12

本文共 3113 字,大约阅读时间需要 10 分钟。

 

  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. ip-one
        192
        ip-two
        168
        ip-three
        24
        ip-four
        1,164
    1. 效果

 

  1. IP过滤器
    1. 这种限制类似于限制编码问题,写到Filter里面最合适不过,这里就不往里面写了,以后用到时在写成Filter,编程可配置功能。
    2. Filter的用处十分广泛。

 

转载于:https://www.cnblogs.com/bbsno1/p/3265179.html

你可能感兴趣的文章