해당 기능의 경우에는 관리자 페이지 등
허가된 IP만 접근 할 수 있게 하거나, 특정 IP를 차단 할 경우 사용했습니다.
DATABASE
우선, 접근 제어 할 IP 를 저장할 DB 테이블 생성.
SEQ NOT NULL NUMBER
RANGE NOT NULL VARCHAR2(30) // 범위 지정(SOLO or BETWEEN)
ADDRESS NOT NULL VARCHAR2(30) // IP주소(범위의 경우 ~로 구분)
REG_DT NOT NULL DATE // 등록일
JAVA
1
2
3
4
5
6
7
8
9
10
|
/**
* IP를 long타입으로 변환
* @param ipAddress
* @return
*/
public static long ipToLong(String ipAddress) {
String[] ipAddressTemp = ipAddress.split("\\.");
long ipAddressLong = (Long.parseLong(ipAddressTemp[0]) << 24) +
(Long.parseLong(ipAddressTemp[1]) << 16) +
(Long.parseLong(ipAddressTemp[2]) << 8) + (Long.parseLong(ipAddressTemp[3]));
return ipAddressLong;
}
|
cs |
이렇게 메소드를 대충 만들어 주신 후
해당 IP가 저장된 DB에서 제어할 IP리스트를 뽑아 request.setAttribute 해주시면 됩니다.
JSP
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
|
<%
String ipAddress = (String) request.getRemoteAddr();
long ipLong = CommonUtil.ipToLong(ipAddress);
List ipAuthList = (List) request.getAttribute( "ipAuthList" );
if(ipAuthList != null && !ipAuthList.isEmpty() ) {
for(int i = 0; i < ipAuthList.size(); i++) {
Map rsMap = (Map) ipAuthList.get(i);
if(CommonUtil.nvl(rsMap.get("RANGE")).equals("BETWEEN")) {
String[] ipRange = CommonUtil.nvl(rsMap.get("ADDRESS")).split("~");
if(ipLong >= CommonUtil.ipToLong(ipRange[0]) && ipLong <= CommonUtil.ipToLong(ipRange[1])) {
auth ++;
}
} else {
if(ipLong == CommonUtil.ipToLong( CommonUtil.nvl(rsMap.get("ADDRESS") ) ) ) {
auth ++;
}
}
}
}
if( auth == 0) {%>
<script type="text/javascript">
alert("접근 허용된 IP가 아닙니다.");
location.href = "https://www.yourDomain.com";
</script>
<% }%>
|
cs |
이건 해당 IP만 접근 가능하게 하는 부분이므로 IP차단의 경우 auth의 값을 1이상일때 적용시키면 됩니다.
해당소스의 적용 위치는 include_header입니다.
반응형
'IT' 카테고리의 다른 글
[JAVA] 날짜를 입력받아 현재 날짜와 비교 (0) | 2019.05.24 |
---|---|
[ORACLE] Commit 된 데이터 복구 (TIMESTAMP) (0) | 2019.05.21 |
[Google Charts] 여러 개체에 대한 꺾은선 그래프 (0) | 2019.04.30 |
[jQuery] 중간에 빠진 index 끼워넣기 (0) | 2019.04.25 |
[MYSQL] 최댓값보다 x%가 감소했을때 (0) | 2019.04.24 |