Плагин Spring Security предоставляет компонент с именем «springSecurityService» типа grails.plugins.springsecurity.SpringSecurityService
.Мне нужно переопределить метод getCurrentUser
этой службы.
Сначала я попытался сделать это, используя расширение
class CustomSecurityService extends SpringSecurityService {
@Override
Object getCurrentUser() {
// my implementation uses methods from the parent class
}
}
Чтобы заменить bean-компонент, определенный плагином, экземпляром классавыше я добавил следующее к resources.groovy
springSecurityService(CustomSpringSecurityService)
Но это не сработало, потому что ни одна из зависимостей SpringSecurityService
(класс, который я расширяю) не установлена, поэтому я получаю NullPointerExceptions.Причина, по которой эти зависимости не установлены, состоит в том, что больше нет пружинного компонента типа SpringSecurityService
Итак, я обратился к делегированию:
import grails.plugins.springsecurity.SpringSecurityService as PluginSpringSecurityService
class CustomSpringSecurityService {
@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService
Object getCurrentUser() {
// my implementation uses methods from pluginSpringSecurityService
}
}
Затем я определил два компонента в resources.groovy
springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)
Во второй попытке я снова хочу, чтобы бин с именем springSecurityService ссылался на CustomSpringSecurityService
, но мне также нужен бин типа grails.plugins.springsecurity.SpringSecurityService
, потому что моя реализация getCurrentUser
используйте некоторые другие методы этого компонента.
Однако я снова обнаружил, что зависимости pluginSpringSecurityService
не устанавливаются.Есть ли более простой способ переопределить метод bean-компонента, предоставляемый плагином, в контексте, который подвержен внедрению зависимости?