12-19 TIL

거북·2023년 12월 19일

TIL

목록 보기
16/22

요약

인증 인가 및 필터에 대해서 이해하고 이를 활용하여 로그인, 회원가입 기능을 구현해보았고 오후엔 팀원들의 코드를 서로 리뷰해보며 예외처리의 다양한 방식을 알게 되었다.

인증/인가/필터

필터란 말 그대로 코드가 실행될 때 필터를 통해 걸러지게 만드는 것인데 이번에 사용한 필터에서는 도메인 주소에 따라서 특정 주소는 접근을 허가해주고 그 외에는 인증처리를 해주도록 하였다.

http.authorizeHttpRequests((authorizeHttpRequests) ->
                        authorizeHttpRequests
                                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
                                .requestMatchers("/api/users/**").permitAll() // '/api/users/'로 시작하는 요청 모두 접근 허가
                                .anyRequest().authenticated() // 그 외 모든 요청 인증처리
        );

다음 코드를 살펴보자. /api/users/는 로그인 및 회원가입을 위한 주소이므로 해당 주소로 접근할 때는 요청을 허가해주고 그 외에는 인증과정을 거쳐야 요청을 허가해주는 코드이다.

이제 허가받지 못해서 인증처리를 하는 부분은 어떻게 진행되는지 살펴보자.
HttpServletRequest타입의 변수를 매개변수로 받아서 사용자의 jwt토큰 정보를 얻어올 수 있다. 이렇게 얻어온 사용자 정보를 토대로 해당 사용자에게 어떤 권한이 있는지를 확인할 수 있고 그에 따라 페이지 접근 권한을 부여할 수 있다.

예외처리

회원가입 기능에서 response값으로 어떤 문제로 에러가 발생하는지 출력시키는 것이 목표였다. 다음은 내가 짠 코드이다.

public String signup(UserRequestDto userRequestDto) {
       User user;
       if (!(userRequestDto.getPassword().equals(userRequestDto.getPasswordCheck()))) {
           return "비밀번호가 일치하지 않습니다.";
       } else if (userRequestDto.getPassword().contains(userRequestDto.getNickname())) {
           return "비밀번호에 닉네임이 포함됩니다.";
       } else if (userRepository.findByNickname(userRequestDto.getNickname()).isPresent()) {
           return "중복된 닉네임 입니다.";
       } else {
           user = new User(userRequestDto.getNickname(), userRequestDto.getPassword());
       }
       userRepository.save(user);
       return "회원가입 성공";
   }

그래서 단순하게 if문을 통해 스트링을 반환해 주었는데 이는 가독성도 좋지 못하고 확장성도 좋지 못하다는 생각을 하고 있었다.

그런데 팀원분들과 리뷰를 하는 과정에 다른 분들의 코드를 보니 에러와 관련된 디렉토리를 새로 파서 그 곳에서 관리를 하고 있었다. 관리하는 과정도 에러enum을 새로 만들어서 관리하니 훨씬 보기도 좋고 새로운 에러상황이 생겨도 그 곳에서 관리할 수 있다보니 확장성도 좋아 보였다.

이번 과제 필수구현사항을 완료하고 나면 에러관리를 다른 팀원들이 했던 방법을 참고해서 수정해 보아야 겠다.

0개의 댓글