أمن الربيع: واضاف "على نجاح تسجيل الدخول المستمع الحدث"

StackOverflow https://stackoverflow.com/questions/182160

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا جديدة على الأمن الربيع. كيف يمكنني إضافة المستمع الحدث الذي أطلق عليه اسم كما يقوم مستخدم بتسجيل الدخول بنجاح؟ كما أنني بحاجة للحصول على نوع من معرف جلسة فريدة من نوعها في هذا المستمع والتي ينبغي أن تكون متاحة على مزيد. انا بحاجة الى هذا الرقم لمزامنة مع خادم آخر.

هل كانت مفيدة؟

المحلول

وتحتاج إلى تحديد فول الربيع التي تنفذ <لأ href = "http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/context/ApplicationListener.html" يختلط = " noreferrer "> 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.groovy:

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