Spring security 는 어떻게 사용자 로그 인 시간 기록 기능 을 실현 합 니까?

원리 분석
spring security 는 인터페이스 Authentication SuccessHandler 를 제공 합 니 다.이 인터페이스 에는 로그 인 성공 후 작업 할 수 있 는 방법 이 하나 밖 에 없습니다.

public interface AuthenticationSuccessHandler {

  /**
   * Called when a user has been successfully authenticated.
   *
   * @param request the request which caused the successful authentication
   * @param response the response
   * @param authentication the <tt>Authentication</tt> object which was created during
   * the authentication process.
   */
  void onAuthenticationSuccess(HttpServletRequest request,
      HttpServletResponse response, Authentication authentication)
      throws IOException, ServletException;
}
이 인 터 페 이 스 를 통 해 로그 인 성공 후의 작업 을 사용자 정의 할 수 있 습 니 다.그러나 spring security 는 Saved Request Aware Authentication SuccessHandler 구현 클래스 를 제공 합 니 다.이 구현 클래스 는 로그 인 하기 전에 방문 할 주 소 를 기억 할 수 있 습 니 다.로그 인 에 성공 하면 사용 자 를 원 하 는 페이지 로 다시 이동 할 수 있 습 니 다.그래서 저 희 는 보통 이러한 방식 을 계승 하여 사용자 정의 로그 인 후속 작업 을 실현 합 니 다.
2.실현 방식
2.1 사용자 정의 AuthenticationSuccessHandler 구현 클래스
Authentication SuccessHandler 인터페이스의 실현 클래스 를 사용자 정의 하고 SavedRequestAware Authentication SuccessHandler 클래스 를 계승 하여 spring 용기 에 추가 합 니 다.

@Component("loginSuccessHandler")
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

  @Autowired
  private IUserDao userDao;
  public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    //         ,       
    String name = authentication.getName();
    userDao.updateLastLonginTime(System.currentTimeMillis(),name);

    //                      
    super.onAuthenticationSuccess(request,response,authentication);
  }
}
그 중에서 remember-me-parameter="remembermParamater"는 프론트 데스크 에서 전달 할 rememberme 의 매개 변수 이름 을 지정 합 니 다.프론트 데스크 에서 전달 할 매개 변수 값 은 true 또는 false 입 니 다.
2.2 spring-security 설정 파일 에 사용자 정의 Authentication SuccessHandler 지정

<!--       -->
    <security:form-login login-page="/login.html" login-processing-url="/login"
               username-parameter="username" password-parameter="password"
               authentication-failure-forward-url="/failed.html"
               default-target-url="/index.html"
               authentication-success-handler-ref="loginSuccessHandler"

    />
예 를 들 어 사용자 정의 로그 인 페이지 를 정의 하 는 탭 에 authentication-success-handler-ref="login SuccessHandler"를 지정 합 니 다.그 중에서 login SuccessHandler 는 사용자 정의 이 bean 이 용기 에 있 는 이름 입 니 다.
2.3 테스트
프로젝트 시작,로그 인,로그 인 성공 후 사용자 테이블 의 last 업데이트login_time 필드.

주의해 야 할 것 은 readme 를 통 해 로그 인 한 경우 현재 사용자 의 로그 인 시간 을 업데이트 하지 않 고 계 정 비밀 번 호 를 통 해 로그 인 할 때 만 업데이트 할 수 있 습 니 다.즉,이때 만 이 onAuthenticationSuccess 방법 을 실행 할 수 있 습 니 다.
3.총화
사용자 로그 인 에 성공 한 후 이번 로그 인 과 관련 된 정 보 를 기록 하려 면 spring-security 가 제공 하 는 Saved Request Aware Authentication SuccessHandler 류 를 계승 하여 그 중의 onAuthentication Success 방법 을 다시 쓰 고 그 중에서 사용자 정 보 를 기록 하 는 작업 을 해 야 합 니 다.방법의 맨 뒤에 부모 클래스 를 호출 하 는 방법 으로 사용 자 를 로그 인 하지 않 기 전에 가 야 할 페이지 로 안내 합 니 다.
테스트 공정 코드 의 주소:공정 예시
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기