Q. 사이트 자체에 리소스가 있을 것이고, 개인정보들이 있을 것이다.
사람이 악의적으로 정보를 탈취하거나, 변형시키는 것을 막아야하는 데 그것을 도와주는 라이브러리가 - 스프링 시큐리티다.
즉 스프링 시큐리티는 인증, 권한을 다룬다.
인증 -> 이메일과 password로 로그인한다.
-Session관리
-토큰 관리 (서버를 여러대 두다보니깐 동기화와, 여러군대 저장문제로 토큰을 사용하기 시작했다)
SNS 로그인으로 인증 위임-> Oauth2
인가 혹은 권한
- Secured
-PrePostAuthorize 에너테이션을 통해서 권한을 측정한다.
SecurityContextHolder.getContext()를 통해서 저장된 정보를 가져올 수 있다. -> mypage 정보 불러올때 사용
@PrePostAuthorize("hasAnyAuthority('ROLE_USER')") -> User권한이 있어야만 가능하다.
spring security 큰그림
1. request가 servlet에 도착하기 전에 여러가지 filter를 거쳐야하한다.
2. websecurityconfig가 SucurityFilterChain을 구성하는 녀석이다.
spring security Authentication context안에있는 Authentication객체가 authenticatied된 걸로 판단한다.
-> 권한에 따라 다르기도 하다.
일부 filter들이 Authentication Manger를 제공한다.
1. SecurityContext는 인증을 보관한다.
2. Authentication을 제공해준느 자를 AuthenticationProvider라고한다. -> 이를 관리하는걸 Authentication Manger이라고 하낟.
3.Authentication에서는 credentails랑 details와 GrantedAuthority를 가지고있다.
4.Authentication == 인증 토큰 Authentication은 인터페이스이다. 즉 구현체들이 Authentication 토큰을 사용한다.
폼 로그인시 -> UsernamePasswordAuthenticationFilter를 사용하고.
만약 쿠키로그인시-> RememberMeAuthenticationFilter를 사용하여 로그인
or sesstion이용시, SecurityContextPersistenceFilter사용.
인증이 안된 사용자일시 -> AnonymouseAuthenticationFilter를 사용.
***BasicAuthenticationFilter -> ajax로그인 모바일앱이나, session사용시
*Authentication*에는
1. authorities -> 권한 정보가 Set구조로 들어가있다.
2. principal -> 인증 대상에 대한 정보, UserDetails 가 들어온다.
3. credentials -> 인증 확인을 위한 정보, 비밀번호.
4. detials -> IP,세션 기타 인증요청에 사용한 정보.
5. boolean authenticated -> 인증되었는가? 확인하는 정보들이 들어있다.