이번 프로젝트에서 보안강화를 위해
otp인증 기능을 만들게 되었는데
소스가.. 너무 안읽혔다...
참고 소스를 보고 개선한 소스를 공유해 본다ㅋ
// 참고소스(예시) 로그인 실패 한경우 메세지 설정하는 부분
int errMsgCode = 0;
String loginFlag = "S";
String loginMsg ="";
....
loginFlag = getAuth();
if("S".equals(loginFlag)){
if(로그인 실패건수가 5번 이상인 경우){
errMsgCode = 10001;
}else if(계정이 잠김경우){
errMsgCode = 10002;
}
}else{
......
}
switch(errMsgCode){
case 10001:
loginFlag = "F";
errMsg ="로그인 실패건수 5번이상";
break;
case 10002:
loginFlag = "F";
errMsg ="계정잠김 ";
break;
...
default:
break;
}
.. 또 로그인관련 로직
솔직히 말하면 진짜 로그인쪽 보면서
직관적인 소스가 중요한지,,
왜 메소드단위로 분리되어야하는지
느꼈다....
이 코드를 보다가 error code를
enum으로 따로 만드는게 좋다고 판단해서
LoginLockReason 이라는 Enum을 작성했다.
public enum LoginLockReason {
LDAP_FAILURE("LDAP 인증 실패 5회 연속"),
OTP_FAILURE("OTP 인증 실패"),
OTP_REQUEST_LIMIT("1분 안에 OTP 요청 5회 초과");
private final String message;
LoginLockReason(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
.......
loginLockReason = getLoginLockReason();
switch(loginLockReason){
case LDAP_FAILURE: case OTP_FAILURE: case OTP_REQUEST_LIMIT:
loginLockReason.getMessage();
break;
...
default:
break;
}
errorCode 보다 enum이 훨씬 직관적인 소스가 되는것 같다.
errorCode는 주석이 없거나 문서가 없다면 소스를 분석해서
어떤 걸 의미하는지 찾아야한다면 enum은 값자체로도
뭘 의미하는지 잘 알수 있어서 좋았다.
그리고 enum은 code와 msg를 같이 관리해 연관되어 있다는
문맥이 생겨서 enum 클래스 만 보더라도 이해하기 좋을 것 같다.
이 LoginLockReason enum 말고도
이번에 OTP 인증 결과도
OtpAuthResult도 enum으로 만들었는데
public enum OtpAuthResult {
INVALID_OTP("유효하지 않은 OTP입니다."),
EXPIRED_OTP("만료된 OTP입니다."),
OTP_ATTEMPTS_EXCEEDED("OTP 시도 횟수가 초과되었습니다."),
OTP_MISMATCH("OTP가 일치하지 않습니다. 남은 시도 횟수: %d");
private final String messageTemplate;
OTPError(String messageTemplate) {
this.messageTemplate = messageTemplate;
}
public String getMessage(Object... params) {
return String.format(messageTemplate, params);
}
}
다른 곳에서는otp 인증할 때 인증결과를 어떻게 다루는지 궁금하다.
반응형
'개발 > 자바' 카테고리의 다른 글
[Java] ArrayList vs LinkedList 비교 (0) | 2024.08.19 |
---|---|
[Java] 엑셀 셀 병합 기능에서 for문과 람다식 비교해보기 (3) | 2024.07.24 |
[자바/스프링] API 호출 라이브러리 HttpURLConnection, RestTemplate, WebClient 비교 (1) | 2024.06.06 |
[Java] 자바 Stack 영역 Stack Frame 구성 요소 (0) | 2024.05.23 |
[Java] Enum 부수기 👊 (0) | 2024.04.23 |