1. SQL 쿼리를 이용한 방법
정규식을 사용하는 방법도 있지만 다른 방법을 사용한다.
이 방법은 특정 메뉴에 특정 ip대역만 접속하게 하고 싶을 때 사용한다.
특정 메뉴의 아이디를 검색하고 그 다음 아이피대역이 맞는지 확인하는 것이다.
#{sIp}는 client ip를 String 값으로 넣어준 값이다.
<SQL>
<select id="selectIpCnt" parameterType="map" resultType="int">
SELECT count(*) from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
and #{sIp} between ip and to_ip
</select>
<select id="selectIpMenuCnt" parameterType="map" resultType="int">
SELECT count(*) from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
</select>
ip대역을 등록하지 않았으면 menu_id를 카운트한 값이 0이므로 첫번째 조건에
ipMenuCnt == 0일때 true값을 반환해준다.
그리고 두번째는 ip대역을 등록했고, ip대역이 등록한 ip대역에 포함된다면 true값을 주고
그 외의 조건은 false값을 반환해준다.
<자바>
int ipCnt = service.selectIpCnt(parameterObject);
int ipMenuCnt = service.selectIpMenuCnt(parameterObject);
if(ipMenuCnt == 0) {
model.addAttribute("ipCheck", true);
}else if(ipMenuCnt >=1 && ipCnt >= 1) {
model.addAttribute("ipCheck", true);
}else{
model.addAttribute("ipCheck", false);
}
2. Ip값을 Long으로 변환해서 비교
String sIp = "192.168.0.1";
long longsIp = ipToLong(sIp);
List<Map> getIp = contentService.getIp(parameterObject);
for (int i=0; i < getIp.size(); i++) {
String ip = String.valueOf(getIp.get(i).get("ip"));
String to_ip = String.valueOf(getIp.get(i).get("to_Ip"));
long longIp = ipToLong(ip);
long longtoIp = ipToLong(to_ip);
if(longIp <= longsIp && longsIp <= longtoIp) {
model.addAttribute("ipCheck", true);
}else {
model.addAttribute("ipCheck", false);
}
}
public long ipToLong(String ipAddress) {
String[] ipAddressInArray = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipAddressInArray.length; i++) {
int power = 3 - i;
int ip = Integer.parseInt(ipAddressInArray[i]);
result += ip * Math.pow(256, power);
}
return result;
<select id="selectIpCnt" parameterType="map" resultType="int">
SELECT ip, to_ip from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
and #{sIp} between ip and to_ip
</select>
클라이언트 ip와 아이피 대역들을 long으로 전부 바꿔서 대역을 설정하는 코드이다.
아무래도 SQL로 설정하는 것이 편하기도 하고 메모리를 덜 잡아먹는다.
'Java' 카테고리의 다른 글
Java에서 Mail 보내는 방법 (0) | 2021.10.08 |
---|---|
버튼 CSS(검색 창 같은) (0) | 2021.07.11 |
CKEditor 사용 시 html 태그가 그대로 출력 될 경우 (0) | 2021.07.09 |
배열 (0) | 2021.04.01 |
연산자 (0) | 2021.03.31 |