2

認証イベントをリッスンするために SecurityListener を使用しています。

class ProductSecurityEventListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

    def eventService;

    void onApplicationEvent(InteractiveAuthenticationSuccessEvent event) {
         def user = event.getAuthentication().getPrincipal();
         def secUser = SecUser.findByUsername(user.username)
         eventService.logEventLogin(secUser);
}

resources.groovy でリスナー Bean を定義します。

beans = {
    productSecurityEventListener(ProductSecurityEventListener);
}

config.groovy で有効にします

grails.plugins.springsecurity.useSecurityEventListener = true

eventservice.logEventLogin で null ポインターを取得し続けます

java.lang.NullPointerException: Cannot invoke method logEventLogin() on null object

デバッグすると、イベントが発生し、イベント メソッドが呼び出されていることがわかります。なぜeventServiceが注入されないのか、私の人生では理解できません。

これが私のサービスです

class EventService {
    def logEventLogin(SecUser secUser) {
        event event = new Event(eventType: EventEnum.LOGIN,  secUser: secUser, eventDate: new Date());
        event.save();
    }

アイデアやヒントを歓迎しますか?

4

2 に答える 2

2

プロパティを設定する必要がありeventServiceます:

beans = {
    productSecurityEventListener(ProductSecurityEventListener) {
       eventService = ref('eventService')
    }
}
于 2013-09-02T11:45:51.413 に答える