문제

나는 새로운다.어떻게 이벤트 리스너를 추가하는 것이라고 사용자로 로그를 성공적으로?또한 내가 필요로하는 어떤 종류의 독특한 세션 ID 에서 이 수신기는 사용할 수 있어야합니다.내가 필요로 이 ID 동기화된 다른 서버입니다.

도움이 되었습니까?

해결책

를 정의해야 합 봄 콩를 구현하는 ApplicationListener.

다음 코드에서 다음과 같은 것이 가능합니다.

public void onApplicationEvent(ApplicationEvent appEvent)
{
    if (appEvent instanceof AuthenticationSuccessEvent)
    {
        AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
        UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();

        // ....
    }
}

그런 다음 applicationContext.xml 파일의 정의는 콩고 자동으로 수신을 시작 이벤트:)

다른 팁

문제 AuthenticationSuccessEvent 은 그것을 얻지 않는 게시 기억에-나에게 로그인합니다.만약 당신이 기억하여-저에게 인증을 사용 InteractiveAuthenticationSuccessevent 대신,그것은 작품에 대한 정상적인 로그인뿐만 아니라 기억에 대한-나에게 로그인합니다.

@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
    {
        UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
        // ...
    }
}

비슷한 필의 대답이지만,수정하 제네릭으로 고려 사항:

public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {

  @Override
  public void onApplicationEvent(final AuthenticationSuccessEvent event) {

      // ...

  }

}

에배우,보안 플러그인,당신은에서 할 수 있는 Config.그루비:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->

        def session = SecurityRequestHolder.request.getSession(false)
        session.myVar = true

}

또 다른 방법을 사용하여 @EventListener

@EventListener
public void doSomething(InteractiveAuthenticationSuccessEvent event) { // any spring event
    // your code 

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top