일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Log4j
- session
- 권한부여
- 자바
- 정해진기간동안
- Timeout
- 최대최소
- Linux
- Spring
- CentOS
- Interceptor
- ip체크
- 톰캣
- 새글
- Iterator
- lombok
- 접속권한
- springboot
- vi
- swagger
- new아이콘
- SAMBA
- new
- String
- indexof
- tomcat
- 배열
- java
- login
- Today
- Total
Cheat Sheet
#IP체크 #접속권한 #IP대역 본문
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 |