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