티스토리 뷰
728x90
인증처리를 할때 가장 핵심적인 역할을 하는 클래스
AuthenticationManager가 현재 인증을 처리할 수 있는 가장 적절한 AuthenticationProvider를 찾아서 인증을 위임한다.
인증을 처리하고 자기에게 위임한 AuthenticationManager에게 인증 결과를 돌려준다.
- AuthenticationProvider는 보통 개발자들이 본인들 프로젝트 실정에 맞게 끔 구현한다.
- AuthenticationProvider는 인터페이스로 2개의 메서드를 가진다.
- authenticate 메서드는 인증 처리를 위한 검증을 한다.
- supports는 현재 인증을 처리할 수 있는 기준이 되는지를 검사한다.
- authenticate 메서드에 authentication 인자를 받는데 여기에서 사용자가 입력한 id나 password를 전달받는다.
- ID 검증은 UserDetailsService(인터페이스) 라는 서비스에서 사용자의 계정이 있는지 없는지 확인한다. 있으면 UserDetails 타입으로 반환한다. 만약 없으면 UserNotFoundException이 발생한다.
- Password 검증은 사용자가 입력한 패스워드와 저장되어있는 패스워드와 비교한다. 암호화된 패스워드를 matchs해서 비교하는데 일치하지 않으면 BadCredentialException이 발생한다.
- 그리고 나머지 추가적인 검증까지 성공하게 되면 최종적으로 Authentication에 user 정보와 권한정보인 authoritie를 담은 인증 객체를 생성한다.
- 생성한 인증객체를 자기에게 인증을 위임한 AuthenticationManager에게 돌려준다.
- 그럼 AuthenticationProvider의 역할은 끝난다.
AuthenticationProvider
public interface AuthenticationProvider {
/**
* Performs authentication with the same contract as
* {@link org.springframework.security.authentication.AuthenticationManager#authenticate(Authentication)}
* .
* @param authentication the authentication request object.
* @return a fully authenticated object including credentials. May return
* <code>null</code> if the <code>AuthenticationProvider</code> is unable to support
* authentication of the passed <code>Authentication</code> object. In such a case,
* the next <code>AuthenticationProvider</code> that supports the presented
* <code>Authentication</code> class will be tried.
* @throws AuthenticationException if authentication fails.
*/
Authentication authenticate(Authentication authentication) throws AuthenticationException;
/**
* Returns <code>true</code> if this <Code>AuthenticationProvider</code> supports the
* indicated <Code>Authentication</code> object.
* <p>
* Returning <code>true</code> does not guarantee an
* <code>AuthenticationProvider</code> will be able to authenticate the presented
* instance of the <code>Authentication</code> class. It simply indicates it can
* support closer evaluation of it. An <code>AuthenticationProvider</code> can still
* return <code>null</code> from the {@link #authenticate(Authentication)} method to
* indicate another <code>AuthenticationProvider</code> should be tried.
* </p>
* <p>
* Selection of an <code>AuthenticationProvider</code> capable of performing
* authentication is conducted at runtime the <code>ProviderManager</code>.
* </p>
* @param authentication
* @return <code>true</code> if the implementation can more closely evaluate the
* <code>Authentication</code> class presented
*/
boolean supports(Class<?> authentication);
}
참고
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Linux
- window
- 베리 심플
- Kotlin
- intellij
- Bash tab
- Spring Security
- elasticsearch
- localtime
- LocalDateTime
- Java
- maven
- rocky
- input
- k8s
- 북리뷰
- mybatis
- Github Status
- Mac
- config-location
- JavaScript
- jQuery
- 오라클
- docker
- oracle
- Spring
- svn
- mybatis config
- springboot
- LocalDate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함