봄의 보안:추가"에 성공적으로 로그인 이벤트너"
-
05-07-2019 - |
문제
나는 새로운다.어떻게 이벤트 리스너를 추가하는 것이라고 사용자로 로그를 성공적으로?또한 내가 필요로하는 어떤 종류의 독특한 세션 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
}
제휴하지 않습니다 StackOverflow