@EnableWebSecurity: 기본적인 Web 보안을 활성화 하겠다는 의미
추가 설정을 위해서 WebSecurityConfigurer를 implements 하거나 WebSecurityConfigurerAdapter를 extends하는 방법이 있다.
WebSecurityConfigurerAdapter를 extends하는 방법 사용함.
WebSecurityConfigurerAdapter를의 configurr 메소드를 오버라이드
InitializingBean을 implements해서 afterPropertiesSet을 @Override한 이유는 빈이 생성이 되고 주입 받은 시크릿 값을 base64 decode해서 key 변수에 할당.
Authentication객체의 권한정보를 이용해서 토큰을 생성하는 createToken 메소드 추가.
Token에 담겨있는 정보를 이용해 Authentication 객체를 리턴하는 메소드 생성
토큰을 파라미터로 받아서 토큰을 이용해서 클레임을 만들고 클레임에서 권한 정보를 빼내서 권한정보를 이용해서 유저객체 생성 유저객체, 토큰, 권한정보를 이용해서 Authentication 리턴.
토큰을 파라미터로 받아서 토큰의 유효성 검증을 수행하는 validateToken 생성. 토큰을 파싱해보고 나오는 인셉션 캐치하고 문제있으면 false 없으면 true.
JWT를 위한 커스텀 필터를 만들기 위해 JwtFilter 클래스 생성. GenericFilterBean를 extends해서 doFilter 오버라이드, 실제 필터링 로직은 doFilter 안에 들어감. doFilter 메소드의 역할은 Jwt 토큰에 인증정보를 현재 실행중인 시큐리티 컨텍스트에 저장하는 역할 수행. 필터링을 위해 리절브토큰 메소드 추가 리퀘스트 헤더에서 토큰 정보를 꺼내옴.
TokenProvider, JwtFilter를 적용할때 사용할 JwtSecurityConfig 클래스 추가.