ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jwt 임시 토큰을 만들어서 필터 테스트
    스프링/스프링 시큐리티 2024. 1. 12. 21:28

    웹에 접근할 때 필터를 통해서 토큰이 제대로 전달되는지 확인한다.

     

    실제 jwt 토큰을 만들기 전에 필터 테스트를 진행해볼 예정이다.

     

     

    SecurityConfig.class

    @Configuration
    @EnableWebSecurity
    @RequiredArgsConstructor
    public class SecurityConfig {
    
        private final CorsConfig corsConfig;
    
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            
            http.addFilterBefore(new MyFilter1(), SecurityContextPersistenceFilter.class);
            
            ... (생략)
    }

    http.addFilterBefore()은 필터가 시작되기 전에 체인으로 등록해주는 함수이다. SecurityContextPersistenceFilter.class는 가장 우선순위가 높은 체인으로 설정해준다.

     

     

     

    MyFilter1.class

    public class MyFilter1 implements Filter {
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
    
            // cos라는 토큰을 만들었다고 가정 (토큰이 없으면 필터 진행 안해서 컨트롤러로 못가게)
            if(req.getMethod().equals("POST")) {
                System.out.println("POST 요청됨");
                String headerAuth = req.getHeader("Authorization");
                System.out.println(headerAuth);
                System.out.println("필터1");
    
                if(headerAuth.equals("cos")) {
                    chain.doFilter(req, res);
                } else {
                    PrintWriter outPrintWriter = res.getWriter();
                    System.out.println("인증안됨");
                }
            }
        }
    }

    Myfliter1을 구현한 것이다. cos라는 토큰을 만들었다고 가정을 할 때, POST 요청에 대해서 cos라는 토큰이 같이 넘어올 때에만 chain.doFilter(req, res)를 통해 다음 체인으로 넘어간다. cos라는 토큰이 넘어오지 않았다면 다음 체인으로 넘어가지 않고 종료한다.

     

     

    postman으로 위와 같이 테스트를 진행했다.

    cos1로 요청을 했을 때에는 인증안됨이라고 나오게 했다.

     

    jwt를 적용하진 않았지만 이러한 형식으로 jwt 토큰을 사용할 것이기 때문에 필터를 테스트 해봤다.

     

     

    토큰을 사용하는 구조

    id, pw가 정상적으로 들어와서 로그인이 완료되면 토큰을 만들어주고 그걸 응답해준다.

    요청할 때마다 header에 Authorization의 value 값으로 토큰을 가지고 오는데 넘어온 토큰이 내가 만든 토큰과 일치하는지만 검증하면 된다. 이러한 방식이 RSA, HS256의 기본 방식이다.

     

     

    다음 포스팅에서는 토큰 예시가 아니라 실제 토큰을 만들어서 확인해보겠다.

    '스프링 > 스프링 시큐리티' 카테고리의 다른 글

    jwt - JwtAuthorizationFilter  (0) 2024.01.13
    jwt - JwtAuthenticationFilter  (0) 2024.01.13
    jwt를 위한 security 설정  (0) 2024.01.12
    JWT(Json Web Token)  (0) 2024.01.12
    OAuth - 네이버 로그인 (provider 직접 등록)  (0) 2024.01.10
Designed by Tistory.