Cheat Sheet

#IP체크 #접속권한 #IP대역 본문

Back End/Java

#IP체크 #접속권한 #IP대역

원파 2019. 4. 4. 13:45

 

HttpServletRequest req 
= ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
		String ip = req.getHeader("X-FORWARDED-FOR");

	     if (ip == null || ip.length() == 0) {
	         ip = req.getHeader("Proxy-Client-IP");
	     }

	     if (ip == null || ip.length() == 0) {
	         ip = req.getHeader("WL-Proxy-Client-IP");
	     }

	     if (ip == null || ip.length() == 0) {
	         ip = req.getRemoteAddr() ;
	     }

변수 ip에는 현재 들어온 사람의 IP가 저장된다.

 

 

*** IP대역대 별로 접속권한 부여하는 방법

String[] ipArr = ip.split("\\."); //현재 접속 아이피 분리

//현재 접속 아이피를 long으로 변환
long ipAddressLong = (Long.parseLong(ipArr[0]) << 24) +
	(Long.parseLong(ipArr[1]) << 16) +
	(Long.parseLong(ipArr[2]) << 8) +
	(Long.parseLong(ipArr[3]));		

IP는 xxx.xxx.xxx.xxx(IPv4 주소) 형식이기 때문에 (단, localhost는 IPv6일 수 있어 주의를 요함 - 해당 코드는 IPv4기준)

현재 접속한 아이피를 "." 으로 각 부분을 나누어 IP를 체크한다.

 

*split()은 "."을 특수문자로 보기 때문에 split("\\.")으로 작성


String배열 ipArr[0] = 첫 번째 xxx

              ipArr[1] = 두 번째 xxx

              ipArr[2] = 세 번째 xxx

              ipArr[3] = 네 번째 xxx가 저장된다.

 

* 정확히는 값이 저장되어있는 참조값이 저장된다.

* 배열 인덱스는 0부터 시작


long type의 ipAddressLong변수는

ipArr을 long으로 바꾼 값이 들어간다. 

코드에 대한 설명은 자세히 모르겠다.

 

*참고사이트 : https://m.blog.naver.com/sabisung/220413685246

 


테스트하는 법

 

**자신의 IP주소를 체크한 뒤, 소스코드의 IP범위에 자신의 IP대역이 포함될 경우와 포함되지 않을 경우 두 가지 경우로 

접속이 되는지 안되는지 확인해 본다.

 

 

현재 접속아이피(ipAddressLong)가 

if문 조건의 범위안에 들어간다면(true라면)

보여줄 페이지를 리턴한다.

 

* 아래코드에서는 현재접속 IP가 127.0.0.1에서 127.0.0.255사이에 존재할 경우 보여줄페이지를 return하는 예제코드이다

if(ipAddressLong >= 2130706433L &&  ipAddressLong <= 2130706687L){
			return "보여줄 페이지";
}

 

*참고

자신의 IP주소를 long으로 바꿔주는 사이트

https://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx

 

 

웹페이지 접속시 

localhost가 아닌 

127.0.0.1로 호출한다면 테스트가 가능할 것이다.

 

실제 자신의 IP를 확인한 후, 자신의 IP가 포함된 IP대역을 임의적으로 설정한 후에

테스트를 해봐도 될 것이다.

 

 

*** 이미 정해진 IP와 '일치'하는 IP에게만 접속권한 부여하는 방법

String netuser = null;
netuser = Globals.NET_USER_ADMIN;
String[] division = netuser.split(",");//접속가능 아이피(여러개) 분리

for(int i =0;i<division.length;i++){
	if(ip.equals(division[i])){
		return "보여줄 페이지";	
	}
}

IP대역 안에 들어가는 IP들에게 접속권한을 주는 위의 방법과는 달리

접속가능한 IP를 몇개 정해놓고, 정확히 일치하는 IP 혹은 IP들에게 접속권한을 주는 방법이다.

 

Globals.NET_USER_ADMIN안에는 접속가능한 IP주소들이 저장되어있다.

무조건 이렇게 사용할 필요는 없고, 

아래처럼 임의의 String 변수안에 여러개의 IP주소를 써도 된다.

String netuser = "127.0.0.1, 192.0.0.1, .....";

 

어찌됬든 

이번에도 String type의 문자열을 ","로 나눈다.

나눈 후 반복문을 통해서 현재 접속한 IP와 일치하는게 있다면 보여줄페이지를 보여주는 형식으로 코드를 구현하면 된다.

 

'Back End > Java' 카테고리의 다른 글

#indexOf #Java  (0) 2019.04.04
#Iterator #Java  (0) 2019.04.04
#array #최대최소 #max #min #Java  (0) 2019.03.25