获取客户端计算机的ip地址的方法

2019 精帖
0 1894

获取客户端计算机的ip地址的方法

1.过滤器

package cn.com.dzqc.interceptor;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 获取客户端计算机的ip地址的方法
 * @author Administrator
 *
 */
public class IpFilter implements Filter {
	/**
	 * 销毁方法
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * 过滤方法
	 */
	public void doFilter(ServletRequest sreq, ServletResponse sresp, FilterChain chain)
			throws IOException, ServletException {
		if (!(sreq instanceof HttpServletRequest) || !(sresp instanceof HttpServletResponse)) {
			throw new ServletException("OncePerRequestFilter just supports HTTP requests");
		}
		HttpServletRequest httpRequest = (HttpServletRequest) sreq;
		HttpSession session = httpRequest.getSession();
		
		if(session.isNew()) {
			System.out.println("第一次进入");
			String ip=getIpAddr(httpRequest);
			System.out.println(ip);
		}
		chain.doFilter(sreq, sresp);
	}
	
	/**
	 * 初始化方法
	 */
	public void init(FilterConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}
	/***
	 * 获取客户端计算机的ip地址
	 * @param request
	 * @return
	 */
	public String getIpAddr(HttpServletRequest request) {
       String ip = request.getHeader("x-forwarded-for");
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
           ip = request.getHeader("Proxy-Client-IP");
       }
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
           ip = request.getHeader("WL-Proxy-Client-IP");
       }
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
           ip = request.getRemoteAddr();
       }
       return ip;
	}
	
}

通过HttpSession 对象的isNew方法判断session是不是新创建的



2.web.xml文件的配置

        <filter>
		<filter-name>WmsFilter</filter-name>
		<filter-class>cn.com.dzqc.interceptor.IpFilter</filter-class>
		<async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>WmsFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


留言(0)
加载更多
猜你喜欢
  • blog java微信开发openid

    //访问@RequestMapping("/transfer")public void transfer(HttpSession session,HttpServletRequest request,HttpServletRespon
  • blog sql顺序和执行顺序 【mysql】

    1.SQL 是一种声明式语言 SQL 语言是为声明了一个你想从原始数据中得什么样结果一个范例,而不是告诉如何能够得到结果。SQL 语言声明是结果集属性,会根据 SQL 所声明内容来从数据库中挑选出
  • blog 数据结构--完全二叉树权值

    试题描述:思路: 用数组表示完全二叉树,用先序遍历式遍历每一层节点,用一个数组储存每一层和,因为数据规模小于100000所以用一个容量为17数组即可。完每一层和,再比较层数最小之和最大那一层。代码:packa
  • blog 网络中上行带宽和下行带宽

      字节、KB、MB、GB 之间关系 Bps和bps区别 比特率         在了解带宽之前需要知道一个概念-比特率(Bit Per Second),比特率是指每秒传送
  • blog jsurl路径中参数

    function getQueryValue(key, href) {                href = href || window.location.href;                var match = href.
  • blog c#和设置默认浏览器版本号

    public static string GetDetailVersion(string text) { //通过WebBrowser版本号 //int mainVer
  • blog -没有bug二分查找

    科普: 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 二分查找却是在 1962 年才出现,中间用了 16 年时间。定义 在科学中,二分查找(英语:binary search),也称折
  • blog http请求错误码

    HTTP 错误 400 400 请求出错 由于语格式有误,服务器无理解此请求。不作修改,程序就无重复此请求。 HTTP 错误 401 401.1 未授权:登录失败 此错误表明传输给服务器证书与登录服务器所需证书不匹配。 请与
  • ofc vue属性与属性监视

    vue属性与属性监视
  • blog 字节、KB、MB、GB 之间关系 Bps和bps区别

    原文连接:https://blog.csdn.net/u014737138/article/details/50909218         位:"位(bit)"是电子中最