[01.05] 내일배움캠프[Spring] TIL-47

박상훈·2023년 1월 5일
0

내일배움캠프[TIL]

목록 보기
47/72

[01.05] 내일배움캠프[Spring] TIL-47

1. Spring 중간 미니 프로젝트

마지막 역할 분배

  • 박상훈, 김민수 : 마지막 코드 검토 및 깃 README작업
  • 장현재 : 시현 영상 작업
  • 이재원 : 발표
  • 손혜은 : 발표자료 준비

오늘 한 것

Excepiton

  • Excepion을 만지던 중 발견한 사실이 있다.
  • 의도한 작업 Exception
    -> 토큰을 가지고 있지 않은 상태에서 인증/인가가 필요한 요청을 했을 때 토큰이 없다!라는 반환 값과 StatusCode로 주고 싶었다.
  @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String token = jwtUtil.resolveToken(request);

        log.info(request.getRequestURI().trim());


        if (token != null) {
            if (!jwtUtil.validateToken(token)) {
                jwtExceptionHandler(response, "Token Error", HttpStatus.UNAUTHORIZED.value());
                return;
            }
            Claims info = jwtUtil.getUserInfoFromToken(token);
            setAuthentication(info.getSubject());
        }else{
        //이 부분 추가!
            jwtExceptionHandler(response, "Token is null", HttpStatus.NOT_FOUND.value());
            return; 
        }
        filterChain.doFilter(request, response);
    }
  • 문제점 발생 : 인증/인가가 필요하지 않은 회원가입,로그인 이 필터를 거치게 돼서 토큰을 넣지 않는게 당연하면서 Token Null이 발생했다.
    -> 기존에 알고있던 PerminAll()를 해주면 필터를 거치지 않는다는 가설이 틀렸다...!!!!!
  • 수정
   @Bean
    public WebSecurityCustomizer webSecurityCustomizer(){
        return (web) -> web.ignoring()
                .requestMatchers(PathRequest.toH2Console())
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                .requestMatchers("/user/**"); -> 여기 추가
    }
  • web.ignoring()처리를 회원가입,로그인에 걸어주니 필터를 거치지 않고 진행되었다.
  • 아직 추측일 뿐이지만 , 필터 자체를 안거치게 하는 것 보다 doFilter()를 로그인과 회원가입 요청시에 바로 들어가도록 짜는 것도 방법일 것 같은데 뭐가 더 좋고 효율적일지는 아직 개념이 부족하다.

NoContent

  • 게시글이나, 댓글, 좋아요가 삭제되는 로직에서 이상하게 로직은 잘 돌아가는데 의도한 ResponseBody 내용이 찍히지 않는 상황이 발생했다.
  • HttpStatus.NO_CONTENT : API명세를 Resful하게 짜기 위해 삭제 작업시 변경해줬던 사항인데
    스프링 자체에서 HttpStatus.NO_CONTENT 세팅 시 응답 바디를 지워버린다는 사실을 뒤늦게 알았다.
  • 결국 삭제를 했을 때 HttpStatus.OK를 사용했다.
profile
기록하는 습관

0개의 댓글