H E L L O    W O R L D !
...

0명

총 방문자 수

...

50 개

총 포스팅

필터에서 예외처리

2024. 8. 20. 21:24·부트캠프/Dev
목차
  1. 토큰 유효성 검사

토큰 유효성 검사

jwt 토큰에 유효성에 대해 예외처리를 해주었다.

한가지 생각해야할 것은 필터 단계는 디스패쳐 서블릿 보다 앞에 있기 때문에 RestControllerAdvice나 ControllerAdvice로 예외 처리가 안된다. 여기서 생각해본 것은 예외가 발생한다면 HttpServletResponse에 예외 메세지와 HttpStatus를 반환하고 다음 필터로 넘어가지 않는 방식이 떠올라서 이렇게 구현하였다. 

 

검증 구현부


      
if (StringUtils.hasText(tokenValue)) { // 토큰이 존재하면 검증 시작
// JWT 토큰 substring
String token = jwtUtil.substringToken(tokenValue);
ErrorInfo errorInfo = new ErrorInfo();
// 토큰 검증
if (!jwtUtil.validateToken(token, errorInfo)) {
jwtUtil.jwtExceptionHandler((HttpServletResponse) response, errorInfo, log
return;
}
// 토큰에서 사용자 정보 가져오기
Claims info = jwtUtil.getUserInfoFromToken(token);
User user = userRepository.findByName(info.getSubject())
.orElseThrow(() -> new NullPointerException("Not Found User"));
request.setAttribute("user", user);
chain.doFilter(request, response); // 다음 Filter 로 이동
} else {
jwtUtil.jwtExceptionHandler((HttpServletResponse) response,
new ErrorInfo("토큰이 존재하지 않습니다.", HttpStatus.BAD_REQUEST), log);
}

jwtExceptionHandler함수 구현부


      
public void jwtExceptionHandler(HttpServletResponse response, ErrorInfo errorInfo,
Logger logger) {
response.setStatus(errorInfo.getHttpStatus()
.value());
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
try {
String json = new ObjectMapper().writeValueAsString(errorInfo);
response.getWriter()
.write(json);
} catch (Exception e) {
logger.error(e.getMessage());
}
}

ErrorInfo


      
public class ErrorInfo {
private String msg;
private HttpStatus httpStatus;
}

'부트캠프 > Dev' 카테고리의 다른 글

뉴스피드 프로젝트 2일차  (2) 2024.09.04
뉴스피드 프로젝트 1일차  (0) 2024.09.04
개인과제 구현 -2  (0) 2024.08.16
개인과제 구현 -1  (0) 2024.08.13
스프링 입문 개인 프로젝트 시작  (0) 2024.08.11
  1. 토큰 유효성 검사
'부트캠프/Dev' 카테고리의 다른 글
  • 뉴스피드 프로젝트 2일차
  • 뉴스피드 프로젝트 1일차
  • 개인과제 구현 -2
  • 개인과제 구현 -1
nameless1004
nameless1004
nameless1004
Nameless
nameless1004
전체
오늘
어제
  • 분류 전체보기 (64)
    • DB (4)
      • MySQL (1)
    • Web (1)
    • CS (0)
    • 알고리즘 (1)
    • JAVA (4)
      • 문법 (0)
      • 디자인 패턴 (1)
    • Spring (2)
    • 트러블 슈팅 (6)
    • 부트캠프 (37)
      • Dev (25)
      • DB (6)
      • 데일리 미션 (5)
    • 도커 (3)
    • 사이드 프로젝트 (5)
      • 쿠키톡 (5)
    • 회사 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

슬랙
스프링 슬랙
유데미
java
DTO
자바 싱글톤
dbeaver
자바
레디스 센티넬 도커
spring
DAO
인터넷강의
db
자바 싱글톤 패턴
스프링 슬랙 알림
singleton
레디스 센티넬
sql
스프링 레디스 센티넬
인프런
부트캠프

최근 댓글

hELLO· Designed By정상우.v4.5.3
nameless1004
필터에서 예외처리

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.