💜 스프링 시큐리티는 요청이 들어오면 Servlet Filter Chain을 자동으로 구성한 후 거치게 된다.
Filter는 Client요청이 전달되기 전후의 URL패턴에 맞는 모든 요청에 필터링 역할을 한다.
예) CSRF, XSS 등 보안 검사를 통해 올바른 요청이 아닐 경우 이를 차단 한다.
이런 기능을 활용하여 스프링시큐리티에서 filter를 사용하여 인증/인가를 구현한다.
💜 Spring 의 보안 Filter를 결정하는데 사용되는 Filter
session, jwt 등의 인증방식들을 사용하는데에 필요한 설정을 완전히 분리할 수 있는 환경을 제공한다.
그 중
일반적인 Spring Security의 인증 과정은 다음과 같습니다:
아래는 Security Filter 들의 실행 순서입니다.
- SecurityContextHolder에는 스프링 시큐리티로 인증한 사용자의 상세정보를 저장한 Authentication객체를 저장한 SecurityContext를 담고 있다.
SecurityContext ? SecurityContextHolder로 접근 가능 ,Authentication객체 가지고 있음
Authentication : 현재 인증된 사용자를 나타내며 , SecurityContext에서 가져올 수 있다.
<UserDetails>
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
System.out.println("authority = " + authority);
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(simpleGrantedAuthority);
return authorities;
}
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
UsernamePasswordAuthenticationToken는 Authentication을 implements한 AbstractAuthenticationToken의 하위 클래스로 , 인증객체를 만드는데 사용된다. \
UserDetailsService
: username/password 인증방식을 사용할 때 사용자를 조회하고 검증한 후 UserDetails를 반환한다. Custom하여 Bean으로 등록 후 사용 가능하다.