12월 20일 수 TIL

장숭혁·2023년 12월 21일
0

TIL작성

목록 보기
35/60

JwtUtil 클래스

public Claims getCustomerClaim(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(key).build()
                .parseClaimsJws(token)
                .getBody();
    }

JwtAuthorizationFilter 클래스

@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");
             return;
         }

         Claims info = jwtUtil.getCustomerClaim(tokenValue);
             //
         try {
             setAuthentication(info.getSubject());
         } catch (Exception e) {
             log.error(e.getMessage());
             return;
         }
     }

     filterChain.doFilter(req, res);
 }
  • Spring Security에서 JWT 토큰을 이용한 인증을 처리하는 필터의 일부이다.

  • getCustomerClaim(String token) : 이 메소드는 주어진 JWT 토큰에서 Claims(즉, 토큰의 페이로드 부분)을 추출하는 역할을 한다.

  • doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) :
    이 메소드는 HTTP 요청이 들어올 때마다 실행되는 필터의 핵심 로직이다. 필터는 요청과 응답을 가로채서 특정 작업을 수행하는 역할을 한다.

  • jwtUtil.validateToken(tokenValue): 가져온 토큰이 유효한지 검증한다. 만약 유효하지 않으면 에러를 로그에 기록하고 필터의 실행을 종료한다.

  • setAuthentication(info.getSubject()): setAuthentication 메소드는 SecurityContext에 인증 정보를 설정하는 역할을 한다. info.getSubject()는 토큰의 주체(일반적으로 사용자 ID)를 가져온다. 이 주체를 이용하여 인증 객체를 생성하고, 이를 SecurityContext에 설정하여, 이후의 인증/인가 과정에서 사용하게 된다.

    필터와 인터셉트 비교

  • 필터(Filter)와 인터셉터(Interceptor)는 모두 클라이언트의 요청을 서버가 처리하기 전에 특정 작업을 수행하게 해주는 역할을 하지만, 그들의 동작 범위와 사용 목적에는 차이가 있다.

  • 필터 :

    • Servlet Container(예: Tomcat)에 의해 동작하며, DispatcherServlet이 실행되기 전에 동작한다.
    • 주로 인코딩, 보안, 로깅 등의 역할을 한다.
    • HttpServletRequest와 HttpServletResponse에 직접 접근할 수 있어 요청과 응답을 좀 더 세밀하게 조작할 수 있다.
  • 인터셉터(Interceptor) : Spring의 DispatcherServlet이 컨트롤러를 호출하기 전후로 동작하며, AOP(Aspect Oriented Programming)와 비슷한 역할을 한다.

  • 주로 로그인 체크, 권한 체크, 프로그램 실행 시간 계산 작업, 로그 기록 등에 사용된다.

  • Spring의 Bean에 접근이 가능하므로, Spring의 기능을 활용하여 처리할 수 있다.

    필터는 웹 애플리케이션에 대한 전반적인 요청과 응답에 대한 처리를 담당하며, 인터셉터는 Spring의 DispatcherServlet이 컨트롤러로 요청을 보내기 전후의 처리를 담당한다.

profile
코딩 기록

0개의 댓글

관련 채용 정보