認証イベントをリッスンするために 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();
}
アイデアやヒントを歓迎しますか?