개인과제를 피드백 받은 내용을 개선했다.
- 9단계 : 권한 확인
🔻 피드백
- 권한 검증이 중복되어 controller에 들어가 있다.
- AuthUtil라는 클래스에 권한 검증 메서드를 구현해서 재사용
- 외부 API 라이브러리 호출 시 JackSon 활용
권한 검증 메서드를 AuthUtil에 구현하고, Controller를 수정
public class AuthUtil {
// 관리자 권한이 있는지 확인
public static boolean hasRole(HttpServletRequest request, UserRoleEnum userRoleEnum) {
String role = (String) request.getAttribute("role");
return role != null && role.equals(userRoleEnum.ADMIN.getAuthority());
}
// 사용자 권한 또는 관리자 권한이 있는지 확인
public static boolean hasAnyRole(HttpServletRequest request, UserRoleEnum... userRoleEnums) {
String role = (String) request.getAttribute("role");
for (UserRoleEnum userRoleEnum : userRoleEnums) {
if (role != null && role.equals(userRoleEnum.getAuthority())) {
return true;
}
}
return false;
}
}
if (!AuthUtil.hasRole(httpServletRequest, UserRoleEnum.ADMIN)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
if (!AuthUtil.hasAnyRole(httpServletRequest, UserRoleEnum.USER, UserRoleEnum.ADMIN)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
JackSon을 이용하여 JSON 데이터를 처리
try-catch을 사용하여 예외 처리
try {
// Json 배열을 List<Map>으로 변환
List<Map<String, String>> weatherList = objectMapper.readValue(responseEntity, new TypeReference<>() {});
// 날시 정보 확인
for (Map<String, String> weatherMap : weatherList) {
String date = weatherMap.get("date");
String weather = weatherMap.get("weather");
// 현재 날짜와 일치하는 지 확인
if (todayDate.equals(date)) {
return weather;
}
}
} catch (Exception e) {
log.error("Error parsing JSON response", e);
}