Q1) 관리자 권한 없을 시 예외 처리 > Http 상태 코드 및 응답 데이터 관련
1. 문제
- 인터셉터 구현 이후 관리자 권한이 없을 경우 예외 발생 시 400 Bad Request 로 반환
- 메시지도 조금 더 명확하게 확인이 되었으면 함
2. 해결 방안
- 기존 코드와 같이 권한 문제로 접근이 불가능할 경우 Http 상태 코드로는 403 Forbidden이 알맞다고 판단
3. 해결 완료
- AccessDeniedException 에 대한 예외 처리를 403 Forbidden으로 반환하도록 GlobalExceptionHandler에 코드 추가
- (추가1) 예외 처리에 대한 응답 DTO(ExceptionDto) 생성
- (추가2) 에러 코드/메시지 관리를 위해 ErrorCode Enum 생성
// GlobalExceptionHandler.java
@ExceptionHandler(AccessDeniedException.class)
public ResponseEntity<ExceptionDto> handleAccessDeniedException(AccessDeniedException e) {
ErrorCode errorCode = ErrorCode.REQUIRE_ADMIN;
ExceptionDto exceptionDto = new ExceptionDto(errorCode.getStatus(), errorCode.getMessage());
return ResponseEntity.status(errorCode.getStatus()).body(exceptionDto);
}
// ExceptionDto.java
@Getter
public class ExceptionDto {
//에러코드로 관리
private final int status;
//에러메세지
private final String message;
public ExceptionDto(HttpStatus status, String message) {
this.status = status.value();
this.message = message;
}
}
// ErrorCode.java
/**
* 에러코드와 에러메세지 관리
*/
@Getter
@AllArgsConstructor
public enum ErrorCode {
// 인가 관련
REQUIRE_ADMIN(HttpStatus.FORBIDDEN, "관리자 권한이 필요합니다.");
private final HttpStatus status;
private final String message;
}
결과
Q2) 로그아웃 기능 구현
1. 문제
- 현재 signup(회원가입), signin(로그인) 기능은 있으나 signout(로그아웃) 기능은 없는 상태
2. 해결방안
- AuthController, AuthServcie 에서 로그아웃 기능 추가 구현
- 로그아웃 시 토큰 삭제되도록 함 (구현 X)
3. 개선 방안 - 우선순위
- 1) 로그아웃 API 구현 (구현 O)
- 2) Access/Refresh Token 구현 + 기존 코드 리팩토링 (구현 X)
- DB 연결이 없으므로 (프로젝트이기도 하니) 메모리 기반 저장소로 대체
- 3) 토큰 블랙리스트 구현 (구현 X)
- 로그아웃 처리된 토큰은 사용할 수 없도록 처리
4. 결과
5. 회고
- 시간이 부족해서 로그아웃 API만 구현하고 그 외 추가 개선 내용은 구현하지 못해서 아쉬움
'Sparta > Projects' 카테고리의 다른 글
[Project] 주특기 심화 - 트러블 슈팅 (0) | 2025.06.12 |
---|---|
[Project] 일정 관리 앱 Develop 하기 (with JPA) (0) | 2025.05.26 |
[Project] 일정 관리 앱 만들기 (0) | 2025.05.14 |
[Project] 키오스크를 만들어보자 (0) | 2025.05.01 |
[Project] 계산기를 만들자 (0) | 2025.04.18 |