java獲取登錄者IP和登錄時間

 第一種直接用java自帶的InetAddress類:

import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;


public class test{
	   public static void main(String[] args) throws Exception{ 
		   InetAddress addr = InetAddress.getLocalHost();      
		   String ip=addr.getHostAddress();//獲得本機IP    
		   String address=addr.getHostName();//獲得本機名稱    
			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String dateNowStr = sdf.format(d);
		   System.out.println("IP: "+ip+"  Name: "+address+"  Time: "+dateNowStr);       
  }

}

輸出結果如下:

第二種根據Web request請求獲取:

package demo.login;

import ins.framework.web.Struts2Action;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;

@SuppressWarnings("serial")
public class LoginAction extends Struts2Action {

	public String login() {
		HttpServletRequest request=this.getRequest();
		this.getIpAddress(request);
		return SUCCESS;
	}

	public  void getIpAddress(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		System.out.println("x-forwarded-for ip: " + ip);
		if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
			// 多次反向代理後會有多個ip值,第一個ip纔是真實ip
			if( ip.indexOf(",")!=-1 ){
				ip = ip.split(",")[0];
			}
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
			System.out.println("Proxy-Client-IP ip: " + ip);
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
			System.out.println("WL-Proxy-Client-IP ip: " + ip);
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_CLIENT_IP");
			System.out.println("HTTP_CLIENT_IP ip: " + ip);
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
			System.out.println("HTTP_X_FORWARDED_FOR ip: " + ip);
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("X-Real-IP");
			System.out.println("X-Real-IP ip: " + ip);
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
			System.out.println("getRemoteAddr ip: " + ip);
		}
        //獲取本地ip
	    if("0:0:0:0:0:0:0:1".equals(ip)){
			    try {
				    ip =  InetAddress.getLocalHost().getHostAddress();
			    } catch (UnknownHostException e) {
				    // TODO Auto-generated catch block
				    e.printStackTrace();
			    }
			    System.out.println("getLocal ip: " + ip);	
		    }
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateNowStr = sdf.format(d);
		System.out.println("登錄IP: " + ip+"登錄時間:"+dateNowStr);
	}	
}

本地會輸出:

服務器端如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章