일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 언리얼엔진
- Firebase
- 프로그래머스
- Inventory
- 구현
- 스택
- Unity
- UE4
- 유클리드호제법
- Photon
- 포톤
- QueryDSL
- 스파르타내일배움캠프TIL
- UnrealEngine
- 내일배움캠프
- 유니티
- c#
- 이분탐색
- Unity3d
- 워크플로
- 문자열
- 스파르타내일배움캠프
- 순열
- C++
- 해시
- Unity2D
- 알고리즘
- BFS
- FSM
- unityui
Archives
- Today
- Total
개발 낙서장
[Spring] Filter 예외 처리 본문
DispatcherSurvlet으로 넘어가면 Exception을 컨트롤하면서 예외 처리가 가능하지만 Filter 단에서는 해당 방식의 예외 처리가 불가능하다.
결국 예외를 핸들링하기 위해서는 예외를 처리하는 Filter를 만드는 등 다른 방법을 사용해야 하는데 그 중 HttpSurvletResponse에 예외 내용을 담아서 return해주는 방법이 있다.
@Override
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException {
String tokenValue = jwtUtil.getJwtFromHeader(req);
if (StringUtils.hasText(tokenValue)) {
if (!jwtUtil.validateToken(tokenValue)) {
log.error("Token Error");
res.setStatus(400);
res.setContentType("application/json");
res.setCharacterEncoding("utf-8");
res.getWriter().write(
new ObjectMapper().writeValueAsString(ResponseMessage.builder()
.httpCode(400)
.msg("토큰이 유효하지 않습니다.")
.data(null).build()
)
);
return;
}
Claims info = jwtUtil.getUserInfoFromToken(tokenValue);
try {
setAuthentication(info.getSubject());
} catch (Exception e) {
log.error(e.getMessage());
return;
}
}
filterChain.doFilter(req, res);
}
JWT 토큰을 검증하고 만료됐을 경우 HttpCode 400과 함께 토큰이 유효하지 않다는 메세지를 클라이언트에게 보내는 코드이다.
- res.setStatus : HttpCode를 설정한다.
- res.setContentType : 반환 타입을 설정한다. 나는 ResponseMesage라는 객체에 담아 클라이언트에게 보낼 것이기 때문에 Json으로 설정했다.
- res.setCharacterEncoding : 반환 값의 인코딩을 설정한다.
- res.getWriter().write(value) : value에 메세지를 담아 Body로 보낸다. int, String, char[]만 넣어 보낼 수 있다.
write 메소드에 객체를 담아 보낼 수는 없어서 Jackson에서 제공하는 ObjectMapper를 통해 Json으로 직렬화하여 전송했다.
(ObjectMapper를 사용할 경우 IOException을 핸들링해주어야 한다.)
'Java' 카테고리의 다른 글
[Spring] DTO와 Entity (0) | 2024.02.15 |
---|---|
데이터베이스(DB, DataBase) (0) | 2024.02.13 |
[Spring] 쿠키와 세션 (0) | 2024.01.25 |
Jackson (0) | 2024.01.18 |
Spring MVC (0) | 2024.01.18 |
Comments