Spring Security 에서 사용자 가 로그 인 을 어떻게 실현 하 는 지 설명 합 니 다.
5241 단어 SpringSecurity로그 인
1.머리말
Spring Security 실전 건어물 시 리 즈 를 읽 는 것 을 환영 합 니 다.Spring Security 안전 프레임 워 크 를 통합 할 때 우리 가 가장 먼저 처리 한 것 은 우리 프로젝트 의 실제 수요 에 따라 맞 춤 형 등록 로그 인,특히 Http 로그 인 인증 일 수 있 습 니 다.이전 관련 글 에 따 르 면 Http 로그 인 인증 은 필터 UsernamePassword AuthenticationFilter 에서 처 리 됩 니 다.우 리 는 이 필 터 를 분명하게 해야만 약간의 맞 춤 형 화 를 할 수 있다.오늘 우 리 는 그것 의 소스 코드 와 작업 절 차 를 간단하게 분석 할 것 이다.
2.UsernamePasswordAuthenticationFilter 소스 코드 분석
UsernamePassword AuthenticationFilter 는 Abstract AuthenticationProcessingFilter(별 문 분석)에 계승 되 었 습 니 다.로그 인 요청 을 차단 하고 계 정과 비밀 번 호 를 가 져 오 는 역할 을 합 니 다.그리고 계 정 비밀 번 호 를 인증 증명서 UsernamePassword AuthenticationToken 에 밀봉 한 다음 에 증 거 를 특정 설정 의 AuthenticationManager 에 넘 겨 인증 하 는 역할 을 합 니 다.소스 코드 분석 은 다음 과 같다.
public class UsernamePasswordAuthenticationFilter extends
AbstractAuthenticationProcessingFilter {
// 、 key
public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username";
public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password";
// set
private String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY;
private String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY;
// POST
private boolean postOnly = true;
// uri /login POST
public UsernamePasswordAuthenticationFilter() {
super(new AntPathRequestMatcher("/login", "POST"));
}
// AbstractAuthenticationProcessingFilter
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
// POST
if (postOnly && !request.getMethod().equals("POST")) {
throw new AuthenticationServiceException(
"Authentication method not supported: " + request.getMethod());
}
// HttpServletRequest 、
String username = obtainUsername(request);
String password = obtainPassword(request);
if (username == null) {
username = "";
}
if (password == null) {
password = "";
}
username = username.trim();
// 、 Token , , ,
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
username, password);
// HttpServletRequest request.getRemoteAddr() request.getSession Token
setDetails(request, authRequest);
// AuthenticationManager Token
return this.getAuthenticationManager().authenticate(authRequest);
}
// , get
@Nullable
protected String obtainPassword(HttpServletRequest request) {
return request.getParameter(passwordParameter);
}
// , get
@Nullable
protected String obtainUsername(HttpServletRequest request) {
return request.getParameter(usernameParameter);
}
//
protected void setDetails(HttpServletRequest request,
UsernamePasswordAuthenticationToken authRequest) {
authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
}
// key
public void setUsernameParameter(String usernameParameter) {
Assert.hasText(usernameParameter, "Username parameter must not be empty or null");
this.usernameParameter = usernameParameter;
}
// key
public void setPasswordParameter(String passwordParameter) {
Assert.hasText(passwordParameter, "Password parameter must not be empty or null");
this.passwordParameter = passwordParameter;
}
// POST
public void setPostOnly(boolean postOnly) {
this.postOnly = postOnly;
}
public final String getUsernameParameter() {
return usernameParameter;
}
public final String getPasswordParameter() {
return passwordParameter;
}
}
절차 에 대한 이 해 를 강화 하기 위해 저 는 이 절차 에 대해 명확 한 설명 을 하기 위해 그림 을 그 렸 습 니 다.3.우 리 는 무엇 을 맞 출 수 있 습 니까?
위의 절차 에 따라 우 리 는 UsernamePassword AuthenticationFilter 작업 절 차 를 이해 한 후에 이런 일 을 할 수 있 습 니 다.
로그 인 요청 URI 와 요청 방식 을 설정 합 니 다.
로그 인 요청 매개 변수의 형식 을 맞 춤 화 합 니 다.예 를 들 어 JSON 형식 으로 제출 하거나 몇 가지 병존 할 수 있 습 니 다.
어떻게 사용자 이름과 비밀 번 호 를 증빙서류 UsernamePassword AuthenticationToken 에 봉 하여 업무 장면 에 필요 한 특수 증 거 를 맞 춥 니까?
4.우 리 는 어떤 의문 이 있 을 까?
AuthenticationManager 는 어디에서 왔 습 니까?그것 은 무엇 입 니까?증 거 를 어떻게 인증 하 는 지,인증 성공 의 후속 디 테 일 은 무엇 입 니까?인증 실패 의 후속 디 테 일 은 무엇 입 니까?떠 나 지 말고 계속 주목 하 세 요.
Spring Security 에서 사용자 가 로그 인 을 어떻게 하 는 지 에 대한 이 글 은 여기까지 입 니 다. 사용자 가 로그 인 내용 을 실현 하려 면 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 희 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Spring] Spring Security - JWT강력한 사용자 인증 및 Access 제어 framework이다. 이는 Java 애플리케이션에 인증 및 권한 부여를 제공하는데 중점을 두었으며 다양한 필터를 사용하여 커스터마이징이 가능하다. '인증(Authentica...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.