Похоже, проблема в том, что ваша userService ограничена сеансом, и в то время, когда попытка внедрить службу в фильтр не обязательно является сеансом.
Если ваш userService обязательно является сеансом-scoped тогда вам нужно использовать прокси-сервер scoped в вашем весеннем конфиге.Например, в grails-app / conf / spring / resources.groovy:
import com.your.service.UserService
...
userServiceSession(UserService)
{ bean ->
bean.scope = 'session'
}
userServiceSessionProxy(org.springframework.aop.scope.ScopedProxyFactoryBean)
{
targetBeanName = 'userServiceSession'
proxyTargetClass = true
}
Затем переименуйте введенную переменную в свой SecurityFilter:
def userServiceSessionProxy
(и, очевидно, переименуйте там, где вы ее используете в другом местев классе).
Что нужно сделать, это внедрить прокси во время внедрения, но перейти к фактической службе только во время выполнения фильтра (когда есть сеанс).
Примечание: не уверен, позволяет ли это делать в других местах, где будет происходить сеанс (например, контроллеры), по-прежнему ссылаться на службу как «userService», в противном случае вы можете переименовать userServiceSession в userService в resources.groovy (и обновите targetBeanName соответственно).