티스토리 뷰
스프링에서 제공하는 폼 로그인을 사용하는 경우
1. 로그인
2 UsernamePasswordAuthenticationFilter 에서 UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장
3. 순차적으로 필터를 거친 후 마지막 필터인 FilterSecurityInterceptor에서 권한 인가 여부 결정 후 리다이렉트
하지만 JWT를 사용하는 경우 JWT를 가져와 인증하는 필터를 커스터마이징 하여야 한다
1. 로그인
2. JwtAuthenticationFilter에서 토큰 추출 & 토큰 유효성 검사 & UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장
3. 순차적으로 필터를 거친 후 마지막 필터인 FilterSecurityInterceptor에서 권한 인가 여부 결정 후 리다이렉트
나의 경우에는 JwtAuthenticationFilter라는 이름의 필터를 생성하여 JWT 유효성 체크 후 Authentication 객체를 SpringSecurityHolder에 저장하는 코드를 작성하였다
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends GenericFilterBean {
private final JwtProvider jwtProvider;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String token = jwtProvider.resolveToken((HttpServletRequest) request);
if(token != null && jwtProvider.validateToken(token)){
Authentication auth = jwtProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
chain.doFilter(request,response);
}
}
그리고 생성한 필터를 UsernamePasswordAuthenticationFilter 앞에 설정하여 주면 끝
UsernamePasswordAuthenticationFilter |
|
JwtAuthenticationFilter |
|
동작흐름이 헷갈려서 정리할 겸 끄적여봤당
공부하면 할수록 어려운 싴휴리티 ,,,
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring]-스프링부트 프로젝트 예외처리 전략 (0) | 2020.11.11 |
---|---|
[Spring] - SpringBoot에서 Redis Cache 사용하기 (0) | 2020.10.15 |
[Spring] - Filter,Interceptor,AOP의 개념 및 차이 (0) | 2020.10.09 |
[Spring Security] - 스프링 시큐리티 동작과정 (0) | 2020.10.09 |
[spring] - Request 흐름과 웹서버 WAS 에 대하여 (0) | 2020.08.23 |