Skip to content

Commit e0c8e29

Browse files
committed
refactor : bssid 검증 삭제
1 parent 761cf76 commit e0c8e29

File tree

7 files changed

+12
-33
lines changed

7 files changed

+12
-33
lines changed

src/main/java/com/gpt/geumpumtabackend/study/api/StudySessionApi.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@ ResponseEntity<ResponseBody<StudySessionResponse>> getTodayStudySession(
7474
7575
🔐 **Wi-Fi 검증 과정:**
7676
1. Gateway IP 검증 - 캠퍼스 게이트웨이 IP (172.30.64.1)와 일치하는지 확인
77-
2. BSSID 검증 - 등록된 캠퍼스 액세스 포인트인지 확인
78-
3. IP 대역 검증 - 클라이언트 IP가 캠퍼스 범위(172.30.64.0/18) 내인지 확인
77+
2. IP 대역 검증 - 클라이언트 IP가 캠퍼스 범위(172.30.64.0/18) 내인지 확인
7978
8079
💡 **보안 특징:**
8180
- 클라이언트 IP는 서버에서 HttpServletRequest로 추출하여 조작 방지
@@ -148,7 +147,7 @@ ResponseEntity<ResponseBody<Void>> endStudySession(
148147
⏱️ **전송 주기:** 30초마다 자동 전송 권장
149148
150149
🔄 **동작 원리:**
151-
1. Wi-Fi 연결 상태 재검증 (Gateway IP + BSSID 확인)
150+
1. Wi-Fi 연결 상태 재검증 (Gateway IP + IP 대역 확인)
152151
2. 클라이언트 실제 IP 주소 재확인 (서버에서 추출)
153152
3. 세션의 lastHeartBeatAt 시간 업데이트
154153
4. 90초 이상 하트비트 없으면 좀비 세션으로 분류

src/main/java/com/gpt/geumpumtabackend/study/dto/request/HeartBeatRequest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@ public record HeartBeatRequest(
1212

1313
@Schema(description = "캠퍼스 네트워크 게이트웨이 IP 주소", example = "172.30.64.1")
1414
@NotBlank(message = "Gateway IP는 필수입니다")
15-
String gatewayIp,
16-
17-
@Schema(description = "Wi-Fi 액세스 포인트 BSSID", example = "a4:88:73:ac:8d:cd")
18-
@NotBlank(message = "BSSID는 필수입니다")
19-
String bssid
20-
15+
String gatewayIp
2116
) {
2217

2318
}

src/main/java/com/gpt/geumpumtabackend/study/dto/request/StudyStartRequest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@ public record StudyStartRequest(
1414

1515
@Schema(description = "캠퍼스 네트워크 게이트웨이 IP 주소", example = "172.30.64.1")
1616
@NotBlank(message = "Gateway IP는 필수입니다")
17-
String gatewayIp,
18-
19-
@Schema(description = "Wi-Fi 액세스 포인트 BSSID", example = "a4:88:73:ac:8d:cd")
20-
@NotBlank(message = "BSSID는 필수입니다")
21-
String bssid
22-
17+
String gatewayIp
2318
){
2419
}
2520

src/main/java/com/gpt/geumpumtabackend/study/service/StudySessionService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public StudySessionResponse getTodayStudySession(Long userId) {
5050
public StudyStartResponse startStudySession(StudyStartRequest request, Long userId, HttpServletRequest httpServletRequest) {
5151
// Wi-Fi 검증
5252
WiFiValidationResult validationResult = wifiValidationService.validateFromCache(
53-
request.gatewayIp(), request.bssid(), httpServletRequest
53+
request.gatewayIp(), httpServletRequest
5454
);
5555

5656
if (!validationResult.isValid()) {
@@ -88,7 +88,7 @@ public void updateHeartBeat(HeartBeatRequest heartBeatRequest, Long userId, Http
8888

8989
// Wi-Fi 검증 (캐시 우선 사용)
9090
WiFiValidationResult validationResult = wifiValidationService.validateFromCache(
91-
heartBeatRequest.gatewayIp(), heartBeatRequest.bssid(), httpServletRequest
91+
heartBeatRequest.gatewayIp(), httpServletRequest
9292
);
9393

9494
if (!validationResult.isValid()) {

src/main/java/com/gpt/geumpumtabackend/wifi/config/CampusWiFiProperties.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public record CampusWiFiProperties(
2626

2727
public record WiFiNetwork(String name,
2828
String gatewayIp,
29-
List<String> bssids,
3029
List<String> ipRanges,
3130
Boolean active,
3231
String description) {
@@ -35,9 +34,6 @@ public boolean isValidGatewayIP(String gatewayIp) {
3534
return this.gatewayIp != null && this.gatewayIp.equals(gatewayIp);
3635
}
3736

38-
public boolean isValidBSSID(String bssid) {
39-
return bssids.contains(bssid);
40-
}
4137

4238
public boolean isValidIP(String ipAddress) {
4339
return ipRanges.stream()

src/main/java/com/gpt/geumpumtabackend/wifi/dto/WiFiValidationResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public static WiFiValidationResult error(String message) {
4444

4545
public enum ValidationStatus {
4646
VALID, // 유효함
47-
INVALID, // 무효함 (SSID/BSSID/IP 문제)
47+
INVALID, // 무효함 (IP 대역 문제)
4848
ERROR // 시스템 오류
4949
}
5050
}

src/main/java/com/gpt/geumpumtabackend/wifi/service/CampusWiFiValidationService.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,14 @@ public class CampusWiFiValidationService {
2525
private static final String WIFI_CACHE_KEY_PREFIX = "campus_wifi_validation:";
2626

2727

28-
public WiFiValidationResult validateCampusWiFi(String gatewayIp, String bssid, HttpServletRequest request) {
28+
public WiFiValidationResult validateCampusWiFi(String gatewayIp, HttpServletRequest request) {
2929

3030
try {
3131
// 서버에서 클라이언트 IP 추출
3232
String ipAddress = IpUtil.getClientIp(request);
3333

34-
log.info("Wi-Fi validation request - Gateway IP: {}, BSSID: {}, Client IP: {}", gatewayIp, bssid, ipAddress);
35-
36-
3734
// 캠퍼스 내부인지 확인
38-
boolean isInCampus = isInCampusNetwork(gatewayIp, bssid, ipAddress);
35+
boolean isInCampus = isInCampusNetwork(gatewayIp, ipAddress);
3936

4037
if (isInCampus) {
4138
cacheValidationResult(gatewayIp, ipAddress, true);
@@ -52,7 +49,7 @@ public WiFiValidationResult validateCampusWiFi(String gatewayIp, String bssid, H
5249
}
5350

5451

55-
public WiFiValidationResult validateFromCache(String gatewayIp, String bssid, HttpServletRequest request) {
52+
public WiFiValidationResult validateFromCache(String gatewayIp, HttpServletRequest request) {
5653
try {
5754
// 서버에서 클라이언트 IP 추출
5855
String ipAddress = IpUtil.getClientIp(request);
@@ -68,7 +65,7 @@ public WiFiValidationResult validateFromCache(String gatewayIp, String bssid, Ht
6865

6966
// 캐시에 없으면 전체 검증 수행
7067

71-
return validateCampusWiFi(gatewayIp, bssid, request);
68+
return validateCampusWiFi(gatewayIp, request);
7269

7370
} catch (Exception e) {
7471

@@ -77,7 +74,7 @@ public WiFiValidationResult validateFromCache(String gatewayIp, String bssid, Ht
7774
}
7875

7976

80-
private boolean isInCampusNetwork(String gatewayIp, String bssid, String ipAddress) {
77+
private boolean isInCampusNetwork(String gatewayIp, String ipAddress) {
8178

8279
// 설정 파일 Wi-fi 목록 불러오기
8380
List<CampusWiFiProperties.WiFiNetwork> activeNetworks = wifiProperties.networks()
@@ -89,9 +86,6 @@ private boolean isInCampusNetwork(String gatewayIp, String bssid, String ipAddre
8986
if (!network.isValidGatewayIP(gatewayIp)) {
9087
continue;
9188
}
92-
if (bssid != null && !bssid.isEmpty() && !network.isValidBSSID(bssid)) {
93-
continue;
94-
}
9589
if (network.isValidIP(ipAddress)) {
9690
return true; // 매칭되면 즉시 성공!
9791
}

0 commit comments

Comments
 (0)