봄 보안은 사용자 로그인 시간과 같은 정보를 기록 달성

봄 보안은 사용자 로그인 시간과 같은 정보를 기록 달성

이전 : 봄 보안은 자동 로그온을 달성하기 위해 나에게 다음 시간을 기억

첫째, 원칙 분석

스프링 보안이 인터페이스가 성공적으로 로그인 한 후 동작을 수행하기위한 유일한 방법이며, 인터페이스를 제공 AuthenticationSuccessHandler


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;

}

우리는 인터페이스를 사용자 정의하기 위해 성공적으로 로그인 한 후 작업을 달성 할 수 있지만, 스프링 보안이 제공하는 SavedRequestAwareAuthenticationSuccessHandler구현 클래스를, 주소를 기억할 수있는 구현 클래스는 사용자가 로그인하지 않은 전에, 그래서 성공적으로 로그인 한 후 사용자가 이동할 수 있습니다 액세스 할 수 그는 페이지를 원했다. 그래서 우리는 일반적으로 사용자 정의 함수의 연속 동작에서 기호의 유형을 구현하기 위해 상속을 사용합니다.

둘째, 구현

2.1 사용자 정의 구현 클래스 AuthenticationSuccessHandler

AuthenticationSuccessHandler 맞춤 인터페이스 클래스 클래스 상속 SavedRequestAwareAuthenticationSuccessHandler 스프링의 구현과 용기에 첨가

@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="remembermeParamater"전송 프론트 데스크에서 rememberme 매개 변수 이름, 매개 변수 값이 전달되는 전경이 참인지 거짓인지 지정

2.2 정의 스프링 보안 프로파일에 지정된 AuthenticationSuccessHandler

<!--自定义登录页面-->
        <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="loginSuccessHandler"컨테이너에 빈의 어느 loginSuccessHandler의 사용자 정의 이름을

2.3 테스트

시작 프로젝트는 사용자가 성공적으로 로그인 한 후 테이블을 업데이트 할 수 있습니다, 로그인 last_login_time필드.

참고 로그인이 추가 정보를 통해 경우, 시간이 업데이트되지 않는 현재 한 사용자 만이 방법의, 그런 후에 만 ​​구현은 로그인 계정의 암호가 업데이트됩니다 기록 onAuthenticationSuccess

셋째, 요약

이 로그인에 관련된 성공적으로 기록 정보를 사용자가 로그인 한 후, 당신은 봄 보안 상속 제공해야 SavedRequestAwareAuthenticationSuccessHandler하는 최후의 수단의 동작을 기록 사용자 정보, 사용자 가이드 방법의 아버지라고하는 클래스, 이러한 방법의 재정 onAuthenticationSuccess을, 하지 첫 페이지가는에 로그온.

테스트 프로젝트 코드 주소 : 엔지니어링 예를

추천

출처www.cnblogs.com/chengxuxiaoyuan/p/11967541.html