Spring Security 검증 프로 세 스 분석 및 사용자 정의 검증 방법
Spring Security 는 본질 적 으로 일련의 Filter 이 고 독립 된 Filter Chain 에 삽입 되 며 FilterChain Proxy 라 고 합 니 다.그림 에서 보 듯 이.
실제로 FilterChain Proxy 아래 에는 여러 개의 Filter Chain 이 있어 서로 다른 URL 을 검증 할 수 있 으 며,Filter Chain 에 있 는 Filter 는 정 의 된 서비스 에 따라 자동 으로 증감 된다.따라서 자신의 논 리 를 실현 하려 고 하지 않 는 한 필터 들 을 표시 하고 정의 할 필요 가 없다.
관건 류
Authentication
Authentication 은 사용자 인증 정 보 를 나타 내 는 인터페이스 로 사용자 가 인증 에 로그 인하 기 전에 관련 정 보 는 Authentication 의 구체 적 인 실현 클래스 의 대상 으로 봉 인 됩 니 다.로그 인 인증 에 성공 한 후에 더욱 전면적 이 고 사용자 권한 등 정 보 를 포함 한 Authentication 대상 을 생 성 합 니 다.그리고 이 를 Security ContextHolder 가 가지 고 있 는 Security Context 에 저장 하여 방문 권한 의 감정 등 후속 프로그램 에서 호출 할 수 있 도록 합 니 다.
AuthenticationManager
인증 을 위 한 가장 중요 한 인 터 페 이 스 는 AuthenticationManager 입 니 다.이 인 터 페 이 스 는 한 가지 방법 만 있 습 니 다.
public interface AuthenticationManager {
Authentication authenticate(Authentication authentication)
throws AuthenticationException;
}
그 중에서 authenticate()방법 이 실 행 된 후에 세 가지 상황 이 있 을 수 있 습 니 다.인증 에 성공 하여 사용자 정보 가 있 는 Authentication 을 되 돌려 줍 니 다.
인증 에 실 패 했 습 니 다.AuthenticationException 이상 을 던 집 니 다.
판단 할 수 없습니다.null 로 돌아 갑 니 다.
ProviderManager
Provider Manager 는 위의 AuthenticationManager 에서 가장 흔히 볼 수 있 는 실현 입 니 다.인증 을 직접 처리 하지 않 고 설 정 된 AuthenticationProvider 목록 에 인증 을 의뢰 한 다음 에 모든 AuthenticationProvider 를 순서대로 호출 하여 인증 합 니 다.이 과정 에서 AuthenticationProvider 인증 이 성공 하면 더 이상 검증 을 하지 않 습 니 다.이 인증 결 과 를 Provider Manager 의 인증 결과 로 직접 사용 합 니 다.
인증 과정
사용 자 는 사용자 이름과 비밀 번 호 를 사용 하여 로그 인 합 니 다.
Spring Security 는 자주 사용 하 는 UsernamePassword Authentication Token 과 같은 사용자 이름과 비밀 번 호 를 Authentication 인터페이스의 실현 클래스 로 봉 합 니 다.
위 에서 발생 한 Authentication 대상 을 AuthenticationManager 의 실현 클래스 Provider Manager 에 전달 하여 인증 합 니 다.
Provider Manager 는 각 AuthenticationProvider 를 차례로 호출 하여 인증 을 하고 인증 에 성공 한 후 사용자 권한 등 정 보 를 봉 인 된 Authentication 대상 을 되 돌려 줍 니 다.
AuthenticationManager 가 되 돌아 오 는 Authentication 대상 을 현재 Security Context 에 부여 합 니 다.
사용자 정의 인증
이상 의 지식 비축 이 있 으 면 검증 방법 을 정의 할 수 있다.위 를 통 해 알 수 있 듯 이 실제 검증 작업 을 하 는 것 은 하나의 AuthenticationProvider 입 니 다.따라서 인증 방법 을 사용자 정의 하려 면 하나의 AuthenticationProvider 를 실현 한 다음 Provider Manager 에 추가 하면 됩 니 다.
사용자 정의 인증 공급 자
@Component
public class CustomAuthenticationProvider
implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
if (shouldAuthenticateAgainstThirdPartySystem()) {
// use the credentials
// and authenticate against the third-party system
return new UsernamePasswordAuthenticationToken(
name, password, new ArrayList<>());
} else {
return null;
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(
UsernamePasswordAuthenticationToken.class);
}
}
그 중의 슈퍼 ports()방법 은 authentication 인 자 를 받 아들 여 들 어 오 는 authentication 이 AuthenticationProvider 가 처리 할 수 있 는 유형 인지 판단 합 니 다.등록 인증 공급 자
이제 새로 만 든 AuthenticationProvider 를 Provider Manager 에 등록 하면 모든 작업 이 완 료 됩 니 다.
@Configuration
@EnableWebSecurity
@ComponentScan("org.baeldung.security")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider authProvider;
@Override
protected void configure(
AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated()
.and()
.httpBasic();
}
}
총결산위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Spring Security 검증 절차 에 대한 분석 과 사용자 정의 검증 방법 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.