24.08.30

윤지현·2024년 8월 30일

TIL

목록 보기
54/75

오늘의 루틴

  • 개인과제 피드백 개선 (O)
  • 최소 강의 4개 듣기 (O)

개인과제를 피드백 받은 내용을 개선했다.

  • 9단계 : 권한 확인

🔻 피드백

  • 권한 검증이 중복되어 controller에 들어가 있다.
    • AuthUtil라는 클래스에 권한 검증 메서드를 구현해서 재사용
  • 외부 API 라이브러리 호출 시 JackSon 활용


권한 검증 메서드를 AuthUtil에 구현하고, Controller를 수정


1. AuthUtil.java

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;
    }
}

2. Controller 수정

  1. 관리자 권한만 허용
if (!AuthUtil.hasRole(httpServletRequest, UserRoleEnum.ADMIN)) {
            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
        }
  1. 사용자 또는 관리자 권한만 허용
        if (!AuthUtil.hasAnyRole(httpServletRequest, UserRoleEnum.USER, UserRoleEnum.ADMIN)) {
            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
        }

JackSon을 이용하여 JSON 데이터를 처리


1. WeatherAPIService.java

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);
        }
profile
첫 시작

0개의 댓글