스프링 시큐리티는 처음이라 기존 Jpa를 포스팅 하는것처럼 많은 생략은 없을 예정이다.
/sample/all 호출할 경우 필터가 동작 하는것을 볼수있다.
스프링 시큐리티의 동작에는 여러 개의 객체가 서로 데이터를 주고받으면서 이루어진다. 기본구조는 다음과 같다.
1.Authentication Manager(인증 매니저) =핵심역활
2.Authentication provider=인증매니저가 어떻게 동작 해야하는지
3.UserDetailsService=실제 인증은 이것에 의해 이루어진다.
스프링 시큐리티 필터 는 JSP 필터와 같은 개념이며 스프링의 빈과 연동할 수 있는 구조로 설계 되어있다.
스프링의 여러 개의 필터가 필터 체이닝 이라는 구조로 Request를 처리하게 된다.
개발 시에 필터를 확장하고 설정하면 스프링 시큐리티를 이용해서 다양한 로그인 처리가 가능하다.
-스프링 주요필터-
실제 전달되는 파라미터는 토큰 이라는 이름으로 전달된다.
->스프링 시큐리티 필터의 주요 역활이 인증 관련된 정보를 토큰이라는 객체로 만들어서 전달한다는 의미이다.
코드의 내용을 보면 request를 이용해 사용자의 아이디와 패스워드를 받아서
UsernamePasswordAuthenticationToken이라는 객체를 만들고
이를 Authentication Manager의 authenticate() 에 파라미터로 전달한다.
다양한 방식으로 인증처리 방법 제공
Authentication Provider는 전달되는 토큰의 타입을 처리할 수 있는 존재인지를 확인하고 authnticate()를 수행한다.
내부적으로 UserDetailService를 이용한다.
UserDetailService는 실제로 인증을 위한 데이터를 가져오는 역활
인증처리 단계가 끝나면 다음 동작 부분은 인가 이다.
인증 단계에서 authenticate() 매서드의 리턴값은 Authentication 이라는 인증정보 이다.
인증정보내에는 Rolese(권한) 에 대한 정보가 있다. 이 정보로 원하는 작업을 할수있는지 '허가'하게 되는데 이러한 행위를 Access-Contorl(접근 제한) 이라 한다.
사용자는 스스로를 인증 하기 위해서 아이디와 비밀번호를 입력한다.(Request)
정보가 전달되면 AuthenticationManager 가 적절한AuthenticationProvider을 찾아서 인증을 시도한다.
AuthenticationProvider의 실제동작은 UserDetailsServic를 구현한 객체로 처리한다.
인증이 완료되면 Authentication타입으로 리턴값을 전달환다.
전달된 객체로 적절한 권한이 있는지 확인하는 인가 과정을 거친다. 문제가 없으면 화면을 보여준다.