Jwt를 적용한 로그인 관련 예제는 많이 있다. 나도 해당 예제를 보고 간단한 프로젝트를 만들어 보았다.
다만 작업을 하면서 intellj에서는 쉽게 되던게 eclipse에서는 잘 안되는 부분이 있어서 삽질을 좀 하는거 말고는 큰 이슈는 없었다. 해당 오류 관련해서는 추후에 오류 포스팅에 올리도록 하겠다.
해당 작업 관련해서 중요한 클래스는 3가지 있다.
1. JwtTokenProvider
2. JwtAuthenticationFilter
3. WebSecurityConfig
1. JwtTokenProvider
JWT를 생성하고 검증하는 컴포넌트이다.
소스의 내용을 살펴보면 토큰의 유효시간을 설정하는 부분이 있다. 해당 시간 설정을 통해 토큰의 만료 시간을 정하고 해당기간이 지나면 새토큰을 발급 받아야 한다. 그리고 생성된 토큰을 통해서 user 정보를 반환할 수 있어, 해당 정보는 로그인이 이슈 활용할 수 있다.
2. JwtAuthenticationFilter
실제 인증작업은 여기서 이루어진다. 필터는 JWT로부터 유저정보를 받아와서 UsernamePasswordAuthenticationFilter 로 전달해야 한다.
3. WebSecurityConfig
해당 부분은 Spring Security 관련 핵심이다. Spring Security 관련한 필터 작업을 해주는 역할을 한다. Spring Security를 사용하기 위해서는 WebSecurityConfigurerAdapter 상속받은 클래스에 @EnableWebSecurity 을 올려주어야 한다.
Override 된 confiure 메소드에서 "/admin/**", "/user/**" 형식의 URL로 들어오는 요청에 대해 인증을 요구하고 있습니다. 따라서 해당 URL 는 인증페이지로 연결된다.
그리고 해당 URL 외에 주소에서는 인증 없이 가능하다. [ .anyRequest().permitAll()]
작업 중 Spring Security 에 대해서 부족한 부분이 있어서, 작업 중 삽질이 있었다. 해당 부분 관련해서도 추가적인 공부가 필요하다.**
마치며..
솔직히 이 한번으로 JWT를 완전히 이해하지는 못했다. 하지만 발은 담갔기 때문에 앞으로 부족한 부분을 찾을 수 있는 좋은 계기가 될 거 같다. 회사에서도 jwt 적용을 고려하고 있는거 보면 좀 더 공부의 필요성을 느낀다.
[참고]
https://webfirewood.tistory.com/115
https://m.blog.naver.com/kimnx9006/220638156019