Это довольно странная проблема, и я какое-то время занимался этим, поэтому схожу с ума.
У меня есть контроллер, расширяющий другой контроллер, так что я могу иметь несколько контроллеров, наследующих метод, и они идут примерно такthis:
class EventController extends EventAwareController {
def springSecurityService
def edit = {
// this line prints out principal id
println springSecurityService.principal.id
def eventInstance = getAuthorizedEventById(params.id)
if (!eventInstance) {
flash.message = "${message(code: 'event.not.found.message')}"
redirect(action: "list", controller: "event")
return false
}
}
class EventAwareController {
def eventService
def springSecurityService
def getAuthorizedEventById(def eventId) {
def event
if (eventId) {
// this springSecurityService is null and throws an error
event = eventService.findAuthorizedEvent(eventId, springSecurityService.principal.id)
if (event) {
session.eventId = eventId
}
}
return event
}
}
EventAwareController генерирует:
java.lang.NullPointerException: Невозможно получить свойство 'Principal' для нулевого объекта в com.ticketbranch.EventAwareController.getAuthorizedEventById (EventAwareCwaregroovy: 14)
но мой оператор prinln в EventController печатает основной идентификатор без каких-либо проблем?!?Таким образом, SpringSecurityService вводится как ноль в EventAwareController?
Есть идеи?предложения?Спасибо.